多题目

拓扑排序)输人一张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题 单选

1处应填

A.

!cnt[i]

B.

cnt[i]

C.

cnt[i]=0

D.

cnt[i]==1

第2题 单选

2处应填

A.

q.push(v)

B.

q.pop()

C.

cnt[u]--

D.

cnt[v]--

第3题 单选

3处应填

A.

q.pop()

B.

q.push(v)

C.

tpc--

D.

tpc++

第4题 单选

4处应填

A.

tpc!=n

B.

tpc==n

C.

tpc==0

D.

tpc!=0

第5题 单选

5处应填

A.

cnt[x]++

B.

G[y].push(x)

C.

cnt[y]++

D.

G[y].push_back(x)

发表评论

登录 后再回复