NYOJ 496 拓扑排序
来源:互联网 发布:计算机算法指的是 编辑:程序博客网 时间:2024/06/05 15:39
解决拓扑排序分;
找到入度为0的点----->>删除与此点有关的边----->>>输出该点---------->> 重复操作----->>>>判断点的个数 = ? 总点数 yes : no
#include <stdio.h>#include<string.h>#include <queue>using namespace std;int m,n;int into[100]; int map[27][27];void topusort(){ queue <int> Q; queue <char> S; while(!S.empty()) S.pop(); int count = 0,cn=0,flog = 0; for(int i=1;i<=m;i++) { if(!into[i]) // 首先寻找一个入度为0的点 { Q.push(i); cn++; } } if(cn>1) flog = 1; while(!Q.empty()) { cn = 0; int k = Q.front(); Q.pop(); count++; S.push(k+'A'-1); for(int i=1;i<=m;i++) { if(map[k][i]) { into[i]--; //此处为去边 if(!into[i]) { cn++; Q.push(i); } } if(cn>1) flog = 1 ; } } if(count<m||flog) printf("No Answer\n"); else { while(!S.empty()) { printf("%c",S.front()); S.pop(); } printf("\n"); }}int main(){ int N; char A,B; scanf("%d",&N); while(N--) { memset(into,0,sizeof(into)); memset(map,0,sizeof(map)); scanf("%d%d",&m,&n); getchar(); for(int i=1;i<=n;i++) { scanf("%c %c",&A,&B);getchar(); int a = A-'A'+1; int b = B-'A'+1; map[a][b] = 1; // 转化成图 into[b]++; //统计入度 } topusort(); }}
- NYOJ 496 拓扑排序
- nyoj-496-巡回赛--拓扑排序
- NYOJ 496 巡回赛 拓扑排序
- 拓扑排序——nyoj 496
- NYOJ 496 [巡回赛-拓扑排序]
- nyoj--496--巡回赛(拓扑排序)
- NYOJ 巡回赛 【拓扑排序】
- NYOJ 496题巡回赛(拓扑排序)
- 【巡回赛 496 拓扑排序】
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- 拓扑排序
- PHP自学之路---PHP开发环境配置说明
- java多线程之死锁
- intel cpu 分类 i7、i5、i3、T系列、P系列
- List.链表(增删改查)
- 一个CSS上中下三行三列结构的Div布局
- NYOJ 496 拓扑排序
- 红黑二叉树详解及理论分析
- IO流的文件写入与读取
- PHP中魔术方法的用法
- Java_WebService应用举例
- Struts1和Struts2的不同【11个方面的比较】
- ubuntu下解决解压缩出现中文乱码问题
- Oracle中最常用的函数
- Java 8 的新特性和改进总览