/*
2:拓扑排序
查看 提交 统计 提问
总时间限制: 10000ms 内存限制: 1000kB
描述
给出一个图的结构,输出其拓扑排序序列,要求在同等条件下,编号小的顶点在前
输入
若干行整数,第一行有2个数,分别为顶点数v和弧数a,接下来有a行,每一行有2个数,分别是该条弧所关联的两个顶点编号
输出
若干个空格隔开的顶点构成的序列(用小写字母)
样例输入
6 8
1 2
1 3
1 4
3 2
3 5
4 5
6 4
6 5
样例输出
v1 v3 v2 v6 v4 v5
*/
#include<iostream>
#include<string.h>
using namespace std;
#define maxn 103
int main()
{
int v,a,i,x,y;
cin >> v >> a;
bool edge[maxn][maxn]; // matrix of edges.
int in_degree[maxn];
memset(edge, 0, sizeof(edge));
memset(in_degree,0,sizeof(in_degree));
for(i = 0; i < a; i++)
{
cin>>x>>y;
if( x > 0 && x <= v && y > 0 && y <= v)
{
edge[x][y]=true;
in_degree[y]++;
}
}
for(i = 0;i < v; i++)
{
int k;
// select the next vertex
for(k = 1;k <= v; k++)
{
if(in_degree[k] == 0)
break;
}
cout<<'v'<<k<<' ';
in_degree[k]=-1;
// delete the selected vertex from the graph, and modify the in_degree array.
for(int j=1;j <= v;j++)
{
if(edge[k][j])
in_degree[j]--;
}
}
return 0;
}
拓扑排序
最新推荐文章于 2022-07-12 21:36:19 发布