HDU 3342

来源:互联网 发布:preview.exe软件下载 编辑:程序博客网 时间:2024/05/21 00:20
题目描述
        题目:HDOJ 3342
        题目真啰嗦,实际上是判断一个有向图中是否存在环。
分析
        应用拓扑排序,如果一个有向图可以顺利完成拓扑排序,其肯定不存在环;否则,该有向图肯定存在环。
        陷阱:在输入数据的时候注意数据可能会重复,因此要加一个判断
源代码
#include <stdio.h>#include <string.h>int nodeRelation[100][100];int inDegree[100];int topSort(int N);int main(){int N, M;int master, prentice;int i;int result;scanf("%d%d", &N, &M);while (N != 0){memset(nodeRelation, 0, sizeof(nodeRelation));memset(inDegree, 0, sizeof(inDegree));for (i = 0; i < M; i ++){scanf("%d%d", &master, &prentice);//注意可能会有重复数据if (nodeRelation[master][prentice] == 0){nodeRelation[master][prentice] = 1;inDegree[prentice] ++;}}result = topSort(N);if (result == 1)printf("YES\n");elseprintf("NO\n");scanf("%d%d", &N, &M);}return 0;}int topSort(int N){int i, j, k;for (i = 0; i < N; i ++){for (j = 0; j < N; j ++){if (inDegree[j] == 0){inDegree[j] --;for (k = 0; k < N; k ++){if (nodeRelation[j][k] == 1)inDegree[k] --;}break;}}if (j == N)return 0;}return 1;}