标签:
[2016-02-18][拓扑排序]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | const int maxn = 100 + 10;//n表示节点数,m表示边数,g保存有向边的信息,vis保存是否访问过节点,t表示当前拓扑排序的编号,topo保存拓扑排序的结果//注意,这里节点的编号是 1 ~ n int n,m,g[maxn][maxn],vis[maxn],topo[maxn],t;int dfs(int u){ vis[u] = -1; for(int v = 1,;v < n + 1;v++){ if(g[u][v]){ if(vis[v] < 0) return 0; if(!vis[v] && !dfs(v)) return 0; } } vis[u] = 1; topo[--t] = u; return 1;}int toposort(){ t = n; memset(vis,0,sizeof(vis)); //枚举每一个点,如果存在环,就返回0 for(int u = 1;u < n+1;u++){ if(!vis[u] && !dfs(u)) return 0; } return 1;} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | const int maxn = 100 + 10;int n,m,g[maxn][maxn],vis[maxn],topo[maxn],t;int dfs(int u){ vis[u] = -1; for(int v = 1,;v < n + 1;v++){ if(g[u][v]){ if(vis[v] < 0) return 0; if(!vis[v] && !dfs(v)) return 0; } } vis[u] = 1; topo[--t] = u; return 1;}int toposort(){ t = n; memset(vis,0,sizeof(vis)); for(int u = 1;u < n+1;u++){ if(!vis[u] && !dfs(u)) return 0; } return 1;} |
标签:
原文地址:http://www.cnblogs.com/qhy285571052/p/5199597.html