例题 6-15 UVA 10305 Ordering Tasks 给任务排序
来源:互联网 发布:积分兑换系统源码 编辑:程序博客网 时间:2024/05/29 04:26
简单记录下 书中的方法:
建立一个c数组表示访问的状态,-1为正在访问,1表示访问完毕,0表示未访问。
G[u][v]表示u < v在输入中出现过。
然后遍历U, 对u进行dfs,dfs的方式是从1到n在来一遍,依次进行。
之所以数组倒着写,是因为输入的肯定是dfs最深的,最深的也是最大的,要放在面!
#include<cstdio>#include<cstring>const int maxn = 100 + 10;int c[maxn],G[maxn][maxn],ans[maxn];int n,m,t;bool dfs(int u){ c[u] = -1;// visiting for (int i = 1; i <= n; ++i){ if (G[u][i]){ if (c[i] == -1)return false; else if (!c[i] && !dfs(i))return false; } } c[u] = 1;ans[--t]=u; return true;}bool solve(){ t = n; memset(c,0,sizeof(c)); for (int i = 1; i <= n; ++i)if (!c[i]) if (!dfs(i))return false; return true;}int main(){ while(scanf("%d%d",&n,&m) == 2 && (n || m)){ int a,b; memset(G,0,sizeof(G)); for (int i = 1; i <= m; ++i){ scanf("%d%d",&a,&b); G[a][b] = 1; } solve(); for (int i = 0;i < n; ++i)printf("%s%d",i?" ":"",ans[i]); printf("\n"); } return 0;}
0 0
- 例题 6-15 UVA 10305 Ordering Tasks 给任务排序
- 例题6-15 给任务排序(Ordering Tasks, UVa 10305)
- 给任务排序(Ordering Tasks,UVa 10305)
- 例题6-15 UVa10305 Ordering Tasks(拓扑排序)
- Uva10305 Ordering Tasks 【拓扑排序】【例题6-15】
- uva 10305 Ordering Tasks(拓扑排序)
- uva 10305 Ordering Tasks (拓扑排序)
- UVa 10305 Ordering Tasks (拓扑排序模板)
- [UVA 10305] Ordering Tasks (拓扑排序)
- UVa 10305 - Ordering Tasks 拓扑排序
- UVa 10305 Ordering Tasks(拓扑排序)
- UVa 10305 - Ordering Tasks 拓扑排序题解
- UVA - 10305 Ordering Tasks (拓扑排序)
- Ordering Tasks - UVa 10305 拓扑排序
- Uva 10305 Ordering Tasks(拓扑排序)
- Ordering Tasks From:UVA, 10305(拓扑排序)
- UVa 10305 - Ordering Tasks(拓扑排序)
- UVA - 10305 - Ordering Tasks (拓扑排序!)
- Android 启动时间优化 <22>
- 打包时的配置
- ZOJ 3203Light Bulb(数学)
- wamp开启rewrite_module重写功能启用.htaccess文件
- 华为机试题:将十六进制字符串形式内容转为内存值形式(java)
- 例题 6-15 UVA 10305 Ordering Tasks 给任务排序
- Dom4j的使用(全而好的文章)
- spring 2.5 AOP之代理类基础理解
- 再叙TIME_WAIT
- ZOJ 3204Connect them(最小生成树)
- 日志协查步骤
- 喝啤酒(预防老年痴呆的深度搜索)
- js函数传递两个参数
- 用python3.x正则表达式匹配中文字符串