#include using namespace std; int s[12]; int ma[12][12]; int vis[12]; int u, v, n, m, i, j, k; intmain() { ios::sync_with_stdio(false); while(cin >> n >> m) { memset(s,0,sizeof(s)); memset(ma,0,sizeof(ma)); memset(vis,0,sizeof(vis)); for(int i =0; i < m; i++) { cin >> u >> v; ma[u][v]=1; s[v]++; } for(k =0; k < n; k++) { int flag =1; for(i =1; i <= n; i++) { if(s[i]==0&& vis[i]==0) { vis[i]=1; flag =0; for(j =1; j <= n; j++) { if(ma[i][j]){ s[j]--; } } break; } } if(flag)break; } if(k < n) cout <<"NO\n"; else cout <<"YES\n"; } }
利用队列代码:
#include using namespace std; int s[12]; int ma[12][12]; int u, v, n, m, i, k; intmain(){ ios::sync_with_stdio(false); while(cin >> n >> m){ memset(s,0,sizeof(s)); memset(ma,0,sizeof(ma)); queue<int> q; k =0; for(int i =0; i < m; i++){ cin >> u >> v; ma[u][v]=1; s[v]++; } for(int i =1; i <= n; i++){ if(!s[i]) q.push(i); } while(!q.empty()){ int t = q.front(); q.pop(); k++; for(i =1; i <= n; i++){ if(ma[u][i]){ s[i]--; if(!s[i]) q.push(i); } } } if(k == n) cout <<"YES\n"; else cout <<"NO\n"; } }
链式前向星存图代码
#include using namespace std; int s[12]; int h[12]; int cnt; struct node { int v, next; } a[12]; voidadd(int u,int v){ a[++cnt].v = v; a[cnt].next = h[u]; h[u]= cnt; } int u, v, n, m, i, k; intmain(){ ios::sync_with_stdio(false); while(cin >> n >> m){ cnt =0; memset(h,0,sizeof(h)); memset(s,0,sizeof(s)); queue<int> q; k =0; for(int i =0; i < m; i++){ cin >> u >> v; add(u, v); s[v]++; } for(int i =1; i <= n; i++){ if(!s[i]) q.push(i); } while(!q.empty()){ int t = q.front(); q.pop(); k++; for(i = h[t]; i; i = a[i].next){ s[a[i].v]--; if(!s[a[i].v]) q.push(i); } } if(k == n) cout <<"YES\n"; else cout <<"NO\n"; } }