版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuan_zizizi/article/details/81903137
1.对一个有向无环图(Directed Acyclic Graph,DAG)G进行拓扑排序,是将G中所有顶点排成线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前.
一种可能的拓扑排序结果2->8->0->3->7->1->5->6->9->4->11->10->12
2.代码:
#include<iostream>
#include<queue>
using namespace std;
//函数声明
const int N = 13;
void TopLogic(int DataArray[N][N], int indegree[], int result[]);
void Cout(int Data[], int len);
//计算最短路径条数
void TopLogic(int DataArray[N][N], int indegree[], int result[])
{
int count = 0;
queue<int> q;
for (int i = 0; i < N; i++)
{
if (indegree[i] == 0)
{
q.push(i);
}
}
int cur;
while (!q.empty())
{
cur = q.front();
q.pop();
result[count++] = cur;
for (int i = 0; i < N; i++)
{
if (DataArray[cur][i] != 0)
{
indegree[i]--;
if (indegree[i] == 0)
{
q.push(i);
}
}
}
}
}
void Cout(int Data[], int len)
{
for (int i = 0; i < len; i++)
{
cout << Data[i] << " ";
}
}
//主函数
int main()
{
int G[N][N];
int indegree[N] = {0, 1, 0, 1, 2, 2, 1, 1, 0, 1, 1, 1, 2};
int result[N];
memset(G, 0, sizeof(int)*N*N);
memset(result, 0, sizeof(int)*N);
G[0][1] = G[0][5] = G[0][6] = 1;
G[2][0] = G[2][3] = 1;
G[3][5] = 1;
G[5][4] = 1;
G[6][4] = G[6][9] = 1;
G[7][6] = 1;
G[8][7] = 1;
G[9][10] = G[9][11] = G[9][12] = 1;
G[11][12] = 1;
TopLogic(G, indegree, result);
Cout(result, N);
return 0;
}
3.结果:
0 2 8 1 6 3 7 9 5 10 11 4 12 请按任意键继续. . .