提示
<span style="font-size:14px;">#include<iostream> #include<cstdio> #include<cstring> using namespace std; int mp[15][15],vis[15]; int main() { int n,m; int flag,a,b; while(cin>>n>>m) { memset(mp,0,sizeof(mp)); memset(vis,0,sizeof(vis)); for(int i=0;i<m;i++) { cin>>a>>b; mp[a][b]=1; vis[b]++; } for(int i=1;i<=n;i++) { flag=0;//标记变量 for(int j=1;j<=n;j++) { if(vis[j]==0) { flag=1;//只要有入度为零的点就标记为一 vis[i]=-1;//避免以计算过入度为零的节点再次被计算,所以删除 for(int k=1;k<=n;k++) { if(mp[i][k])//如果mp的值不为零,则说明这两个节点相连 vis[k]--;//与该节点相连的节点入度减一 } break;//找到一个入度为零的点结束 } } if(flag==0)//如果节点未输出完,图中就没有了入度为零的节点,证明有环,则不合法 break; } if(flag==1) cout<<"YES"<<endl;//无环 else cout<<"NO"<<endl;//有环 } }</span><span style="color:#7ca9ed;font-size: 20px;"> </span>
