拓扑排序)输人一张n节点m条边的有向图,用求该图的一个拓扑排序的方式判断该图是否存在有向环,若有拓扑排序输出拓扑排序,并输出“不存在有向环”,否则直接输
出“存在有向环”
输入:
第一行两个正整数 n,m 表示节点数和边数。
接下来 m行,每行2个正整数 x,y表示节点 x->y之间有一条边。
输出:
一个拓扑序:按拓扑序输出点的编号。
若拓扑序不唯一,输出任意一个均可,并输出“存在有向环”。
若无拓扑序,直接输出“不存在有向环”
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#define N 1001
using namespace std;
int n,m,x,y;vector<int>G[N];
stack<int>q;
int cnt[N],tpc;
bool pd ()
{
for(int i=l;i<=n;i++)if(_)q.push(i);
while(!q.empty())
{
int u-q.top();
q.pep();
tPC++;
cout<<u<<” ";
for(int i-0;i<G[u],aize();1++)
{
int v-G[u][i];
2
if(!ent[v])3
if(_④)return 1;
else return 0;
{
int main()
cin>>n>>m;
while(m--)
{
cin>>x>>y;
G[x].push back(y);
5
if(pd ())cout<<"存在有向环";
else cout<<"不存在有向环";
1处应填
!cnt[i]
cnt[i]
cnt[i]=0
cnt[i]==1
2处应填
q.push(v)
q.pop()
cnt[u]--
cnt[v]--
3处应填
q.pop()
q.push(v)
tpc--
tpc++
4处应填
tpc!=n
tpc==n
tpc==0
tpc!=0
5处应填
cnt[x]++
G[y].push(x)
cnt[y]++
G[y].push_back(x)
发表评论