第一次写拓扑排序。。。
原来都是听的理论
参照了网上一篇用法的比较全的博客
自己菜只用朴素拓扑哈哈哈
猛男落泪
博客链接:https://blog.csdn.net/zwj1452267376/article/details/47663635
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int map[505][505];//记录两人是否进行了比赛
int indegree[505];//记录前驱结点
int que[505];//保存拓扑数组
int n,m;
void tuopu()
{
int top,k=0;
for(int i=0;i<n;i++)//进行n轮选出n位
{
for(int j=1;j<=n;j++)
{
if(indegree[j]==0)//前驱为0就是第一名
{
top=j;
break;
}
}
que[k++]=top;//保存进数组
indegree[top]=-1;//前驱结点清除
for(int j=1;j<=n;j++)
{
//断开与其他节点的链接
if(map[top][j]==1)
indegree[j]--;
}
}
for(int i=0;i<k-1;i++)
cout<<que[i]<<" ";
cout<<que[n-1]<<endl;
}
int main()
{
while(cin>>n>>m)
{
memset(map,0,sizeof(map));
memset(indegree,0,sizeof(indegree));
int k,l;
for(int i=0;i<m;i++)
{
cin>>k>>l;
if(map[k][l]==0)//如果两人没有进行比赛分出胜负
{
map[k][l]=1;
indegree[l]++;
}
}
tuopu();
}
return 0;
}