这也是一道简单的拓扑排序题目,当然首先还是要理解题意的~
这是个无向图,连路径都不需要打印出来,想来还是灰常水的题目呀~
不过奈何人时有犯二,写出来之后自己感觉特么一定是对的呀!可是交上去runtime error 很多次,那个郁闷啊……
后来怒删重写!再叫果断AC。。
回头检查代码时发现错误的原因在于循环变量范围,自己给错了限定的变量,导致读取了非法内存。。
看来以后真如果runtime error 还检查不出来,可以考虑水一下——尽量把数组往大了开……
废话不说了,上代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> int n,r; int a,b; int G[210][210]; int vis[210]; int count[210]; void init() { a=0;b=0; memset(G,0,sizeof(G)); memset(vis,0,sizeof(vis)); memset(count,0,sizeof(count)); } void dfs(int u) { vis[u]=1; for(int v=0;v<n;v++) if(G[u][v]&&!vis[v]) { dfs(v); } } int main() { while(scanf("%d%d",&n,&r)!=EOF) { init(); for(int i=0;i<r;i++) { scanf("%d%d",&a,&b); G[a][b]=G[b][a]=1; count[a]++; count[b]++; } int ok=0,cnt=0; for(int i=0;i<n;i++) { if(count[i]%2==1) { ok=1; break; } } if(ok||r<2) printf("Not Possible\n"); else { dfs(0); for(int i=0;i<n;i++) { if(!vis[i]) { ok=1; break; } } if(ok) printf("Not Possible\n"); else printf("Possible\n"); } } return 0; }