版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingongzi/article/details/85886900
#include<stdio.h>
#include<string.h>
int map[100][100];//邻接矩阵
int indegree[100]={0};//每个节点入度个数
int book[100]={0};//标记节点是否被使用
int n,m;//n为节点个数,m为边数
void TuopuSort()
{//实现拓扑排序
int i,j;
int ans=1;//记录此时已经被使用节点个数
while(ans<=n)
{
for(i=1;i<=n;i++)
{//循环遍历n个节点
if(book[i]==0&&indegree[i]==0)
{//没有被使用 并且入度为0的节点
printf("%d ",i);//输出此节点
for(j=1;j<=n;j++)
{//与第i个节点相连接的节点入度减一
if(map[i][j])
indegree[j]--;
}
book[i]=1;//标记i节点被使用过
ans++;//节点使用个数加一
break;//找到一个符合条件的节点结束第二层循环
}
}
}
printf("\n");
return ;
}
int main()
{
int i,j,x,y;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(!map[x][y])
{//map[][]=1代表有边
map[x][y]=1;
indegree[y]++;//入度加一
}
}
TuopuSort();
return 0;
}