这是道简单的拓扑排序题目
题目大意
给出一个有向图,求出它的拓扑排序
解题思路
用degree表示其进入边数目,每次挑出一个入度为0的点输出,并将此点发出的边去掉
重复N次即可
代码如下
#include <stdio.h>
using namespace std;
#define Num 101
int N,resultEnd = 1;
int graph[Num][Num] = {};
int degree[Num] = {};
void findZeroLine()
{
int i,j;
for(i=1;i<=N;i++)
if(degree[i] == 0)
break;
degree[i] = -1;
printf("%d ",i);
for(j=1;j<=N;j++)
if(graph[i][j] == 1)
degree[j]--;
}
int main()
{
scanf("%d",&N);
for(int i = 1;i <= N;i++)
{
int tmp;
scanf("%d",&tmp);
while(tmp != 0)
{
graph[i][tmp] = 1;
degree[tmp]++;
scanf("%d",&tmp);
}
}
for(int i = 1;i <= N;i++)
findZeroLine();
return 0;
}