用设计一个有向无环图,求该图的一个拓扑排序序列。
代码
#include <bits/stdc++.h>
using namespace std;
int mp[100][100];
int a, b;
int n, m;
int poi[100];
int path[100];
int in[100];
int l;
queue<int> q;
struct EDGE //建边
{
int next;
int b;
int w;
};
EDGE edge[100];
int head[100];
int idx;
void add(int a, int b, int w) //加边
{
edge[++idx].next = head[a];
edge[idx].b = b;
edge[idx].w = w;
head[a] = idx;
}
int main()
{
cout << "请输入节点个数与边数" << endl;
cin >> n >> m;
for (int i = 1; i <= m; i++) //输入边
{
int a, b, w;
cin >> a >> b >> w;
add(a, b, w);
in[b]++;
}
for (int i = 1; i <= n; i++)
{
if(in[i] == 0)
q.push(i); //没有边指向i 那就入栈
}
while (!q.empty())
{
int k = q.front();
cout << k << " ";
q.pop();
for (int i = head[k]; i; i = edge[i].next) //遍历这个点的每一条边
{
int b = edge[i].b;
in[b]--; //点的入度-1
if(in[b] == 0)
q.push(b);
}
}
}
运行结果如下