图 ->拓扑排序
2015-10-10 15:00
288 查看
_________<备份>___________
//输入n和m,以及m个二元组(i,j),求1~n的一个排列使得对于每个(i,j),i在j的前面
// 算法:拓扑排序。注意m可能等于0
// 题意:输入n和m,以及m个二元组(i,j),求1~n的一个排列使得对于每个(i,j),i在j的前面 // 算法:拓扑排序。注意m可能等于0 #include<cstdio> #include<cstring> const int maxn = 1000; int n, m, G[maxn][maxn], c[maxn], topo[maxn], t; bool dfs(int u){ c[u] = -1; for(int v = 0; v < n; v++) if(G[u][v]) { if(c[v]<0) return false; else if(!c[v]) dfs(v); } c[u] = 1; topo[--t]=u; return true; } bool toposort(){ t = n; memset(c, 0, sizeof(c)); for(int u = 0; u < n; u++) if(!c[u]) if(!dfs(u)) return false; return true; } int main() { while(scanf("%d%d", &n, &m) == 2 && n) { memset(G, 0, sizeof(G)); for(int i = 0; i < m; i++) { int u, v; scanf("%d%d", &u, &v); u--; v--; G[u][v] = 1; } if(toposort()) { for(int i = 0; i < n-1; i++) printf("%d ", topo[i]+1); printf("%d\n", topo[n-1]+1); } else printf("No\n"); // } }
相关文章推荐
- 根据select选项的值,改变css
- intptr_t 其实不是指针类型
- 使用匿名管道
- TinyBlob、Blob、MediumBlob、LongBlob大小
- 编码压缩标准与视频格式
- UITableView绑定不同的cell 的 ID 写法
- jQuery 获取表单元素中值的方法
- html a标签
- parseInt 和parseFloat 区别
- Worm.Win32.DownLoader.ns病毒主进程新式输入法注入分析(IME Inject)
- linux输入子系统(5) - 学习框架
- Linux命令总结【待续】
- Linux命令总结【待续】
- 【springmvc+mybatis项目实战】杰信商贸-33.出口报运修改+报运货物批量展现-批量修改控件2
- Android项目的打包签名及应用的版本升级(一)
- 枚哥词典01
- ping命令
- 将tomcat作成系统自启动服务并增大jvm启动内存
- ios自动布局
- 个人工作手册 - FusionCharts