HDU 4324 Triangle LOVE

来源:互联网 发布:照片转换视频软件 编辑:程序博客网 时间:2024/05/21 20:27

题目大意:

       给你一个有向图让你判断是否有环,有输出"Yes",否则输出"No",现有t个测例(1 ≤ t ≤ 15),每个测例中的图用邻接矩阵表示(矩阵为正方形的),边长为N(0 < N ≤ 2,000),矩阵中0表示没有边,1表示从i到j有一条有向边,矩阵中只有0和1,每行中01都是紧密相连的,中间没有空格隔开,对于每个测例,如果有环输出"Yes",否则输出"No"。

题目链接

代码:

/*                                  * Problem ID : HDU 4324 Triangle LOVE * Author     : Lirx.t.Una                                  * Language   : C++                      * Run Time   : 203 ms                                  * Run Memory : 4160 KB                                 */ #include <iostream>#include <cstring>#include <cstdio>#include <queue>#defineMAXN2000using namespace std;charg[MAXN][MAXN + 1];shortdeg[MAXN];queue<short>que;booltopsort(int n) {inti;intu, v;for ( i = 0; i < n; i++ )if ( !deg[i] )que.push(i);for ( i = 0; i < n; i++ ) {if ( que.empty() ) return false;u = que.front();que.pop();for ( v = 0; v < n; v++ )if ( '1' == g[u][v] && !(--deg[v]) )que.push(v);}return true;}intmain() {intt, iscn;intn;inti, j;scanf("%d", &t);iscn = 0;while ( t-- ) {memset(deg, 0, sizeof(deg));scanf("%d", &n);for ( i = 0; i < n; i++ ) scanf("%s", g[i]);for ( i = 0; i < n; i++ )for ( j = 0; j < n; j++ )if ( '1' == g[i][j] )deg[j]++;printf("Case #%d: ", ++iscn);if ( topsort(n) ) puts("No");else puts("Yes");}return 0;}

0 0