#include<bits/stdc++.h> using namespace std; int visit[1010]; int p[1010][1010]; int c[1010]; int n,m,u,v,T,t,a,b; void dfs(int k) { visit[k]=1; for(int i=1;i<=n;i++) { if(!visit[i]&&p[k][i]) { dfs(i); } } } int main() { while(cin>>n>>m) { memset(p,0,sizeof(p)); memset(visit,0,sizeof(visit)); for(int i=0;i<m;i++) { cin>>u>>v; p[u][v]=1; } dfs(n); if(visit[1]) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; } BFS做法: #include<bits/stdc++.h> using namespace std; int Map[1010][1010]; int vis[1010]; int c[1010]; int n,m,u,v,a,b; void bfs(int k) { a++; if(b==0) { c[b++]=k; vis[k]=1; } for(int i=1;i<=n;i++) { if(!vis[i]&&Map[k][i]) { vis[i]=1; c[b++]=i; } } if(a<=b) { bfs(c[a]); } } int main() { while(cin>>n>>m) { memset(Map,0,sizeof(Map)); memset(vis,0,sizeof(vis)); for(int i=0;i<m;i++) { cin>>u>>v; Map[u][v]=1; } a=0; b=0; bfs(n); if(vis[1]) { cout<<"YES"<<endl; } else cout<<"NO"<<endl; } return 0; }
