例题11.8Legal or Not
//很基础的拓扑排序题:判断是否是有环图
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
vector<int> graph[101];
int indegree[101];
int TuoPu(int n)
{
queue<int> q;
for(int i=0;i<n;i++)
{
if(indegree[i]==0)q.push(i);
}
int ans=0;
while(!q.empty())
{
int u=q.front();
q.pop();
ans++;
for(int i=0;i<graph[u].size();i++)
{
int v=graph[u][i];
indegree[v]--;
if(indegree[v]==0)q.push(v);
}
}
return ans;
}
int main()
{
int n,m;
while(cin>>n)
{
if(n==0)break;
cin>>m;
memset(indegree,0,sizeof(indegree));
memset(graph,0,sizeof(graph));
for(int i=1;i<=m;i++)
{
int f,t;cin>>f>>t;
graph[f].push_back(t);
indegree[t]++;
}
int ans=TuoPu(n);
if(ans==0)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
}
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
vector<int> graph[101];
int indegree[101];
int TuoPu(int n)
{
queue<int> q;
for(int i=0;i<n;i++)
{
if(indegree[i]==0)q.push(i);
}
int ans=0;
while(!q.empty())
{
int u=q.front();
q.pop();
ans++;
for(int i=0;i<graph[u].size();i++)
{
int v=graph[u][i];
indegree[v]--;
if(indegree[v]==0)q.push(v);
}
}
return ans;
}
int main()
{
int n,m;
while(cin>>n)
{
if(n==0)break;
cin>>m;
memset(indegree,0,sizeof(indegree));
memset(graph,0,sizeof(graph));
for(int i=1;i<=m;i++)
{
int f,t;cin>>f>>t;
graph[f].push_back(t);
indegree[t]++;
}
int ans=TuoPu(n);
if(ans==0)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
}
全部评论
相关推荐
点赞 评论 收藏
分享
05-24 18:11
Java 点赞 评论 收藏
分享
07-09 13:51
门头沟学院 Java 还处在暑期实习上岸后的摆烂状态实习:杂活多,产出少,文档也没偷学多少八股:忘的差不多了项目:有实习就不会问玩具项目了吧力扣:我可以说我连hot 100都没刷完吗国企:从零开始准备论文:没着落
回收旧报纸:世另我,只是我比你更烂一些,没找到实习,你起码还有实习的,秋招猛猛冲,加油
点赞 评论 收藏
分享