usaco frame up(所有拓扑排序的输出)
2017-02-10 12:00
302 查看
先根据图建图再拓扑排序。
/** ID: jinbo wu TASK: frameup LANG:C++ */ #include<bits/stdc++.h> using namespace std; map<char,int> x1,x2,y3,y2,vis,v; char a[35][35]; int b[35][35]; char cnt[30]; int du[35]; bool vd[50]; int n,m,l; char ans[50]; void dfs(int num) { int u; if(num==l) { cout<<ans<<endl; return ; } for(int i=0;i<l;i++) { u=cnt[i]; if(!vd[u]&&!du[u]) { for(int j=0;j<l;j++) if(b[u][cnt[j]]) du[cnt[j]]--; vd[u]=1; ans[num]=u+'A'; dfs(num+1); for(int k=0;k<l;k++) i 4000 f(b[u][cnt[k]]) du[cnt[k]]++; vd[u]=0; } } } int main() { freopen("frameup.in","r",stdin); freopen("frameup.out","w",stdout); cin>>n>>m; char c; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>a[i][j]; c=a[i][j]; if(c!='.') { if(!x1[c]) x1[c]=i; else x1[c]=max(x1[c],i); if(!x2[c]) x2[c]=i; else x2[c]=min(x2[c],i); if(!y3[c]) y3[c]=j; else y3[c]=max(y3[c],j); if(!y2[c]) y2[c]=j; else y2[c]=min(y2[c],j); } if(!vis[c]&&c!='.') { cnt[l++]=c-'A'; vis[c]=1; } } sort(cnt,cnt+l); for(int k=0;k<l;k++) { c=cnt[k]+'A'; v.clear(); int t=cnt[k]; for(int i=y2[c];i<=y3[c];i++) { char u=a[x2[c]][i]; int f=x2[c]; if(u!=c&&!v[u]&&u!='.') { int d=u-'A'; b[t][d]=1; du[d]++; v[u]=1; } } for(int i=y2[c];i<=y3[c];i++) { char u=a[x1[c]][i]; if(u!=c&&!v[u]&&u!='.') { int d=u-'A'; b[t][d]=1; du[d]++; v[u]=1; } } for(int i=x2[c]+1;i<x1[c];i++) { char u=a[i][y3[c]]; if(u!=c&&!v[u]&&u!='.') { int d=u-'A'; b[t][d]=1; du[d]++; v[u]=1; } } for(int i=x2[c]+1;i<x1[c];i++) { int f=y2[c]; char u=a[i][y2[c]]; if(u!=c&&!v[u]&&u!='.') { int d=u-'A'; b[t][d]=1; du[d]++; v[u]=1; } } } dfs(0); }
相关文章推荐
- ZOJ1083:Frame Stacking(拓扑排序 & 字典序输出所有结果)
- USACO Frame Up 解题报告
- (hdu step 4.3.3)Sum It Up(从n个数中选出m个数让他们的和达到指定和targetSum,输出所有的合法序列)
- POJ 1270 Following Orders(拓扑排序:输出所有可能)
- POJ 1270 Following Orders(拓扑排序:输出所有可能)
- c语言:3种方法;求出0~999之间的所有“水仙花数”并输出。
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34–5 + 67–8 + 9 = 100。
- 输出括号所有合法匹配-sohu产品技术训练营笔试题-2013年5月12日
- 第12周 项目4(5)-输出通过一个节点的所有简单回路
- 禁用页面及页面所有frame内的右键菜单
- 编程计算并输出1到n之间的所有数的平方和立方,n由用户从键盘输入
- PHP输出当前进程所有变量
- PHP输出当前进程所有变量 / 常量 / 模块 / 函数 / 类
- 1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解。
- 第十二周 项目4 利用遍历思想求解图问题(输出所有路径 )
- 数据结构--栈-编写一个算法输出n个布尔量的所有可能的组合
- jsp输出所有请求头的名称方法
- 第十一周项目六(四):输出1000以内的所有回文素数
- 第十一周项目六 (3+)输出1000以内所有回文素数
- 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。