题目
编写函数实现图的拓扑排序。
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, m;
int h[N], e[N], ne[N], idx;
int d[N];
int vis[N];
void add(int a, int b);
void topsort();
void input();
int main()
{
input();
topsort();
return 0;
}
void input()
{
cout<<"请输入点数:";
cin >> n ;
cout<<endl;
cout<<"请输入边数:";
cin >> m ;
memset(h, -1, sizeof(h));
cout<<endl<<"请输入边:"<<endl;
for (int i = 0; i < m; i++)
{
int a, b;
cin >> a >> b;
add(a, b);
d[b]++;
}
}
void topsort()
{
cout<<"The topology sequence is : ";
int top = -1;
for (int i = 1; i <= n; i++)
{
if (!d[i])
vis[++top] = i;
}
while (top > -1)
{
int t = vis[top--];
cout << "v" << t << " ";
for (int i = h[t]; i != -1; i = ne[i])
{
int j = e[i];
if (--d[j] == 0)
vis[++top] = j;
}
}
}
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}