#include<cstdio>
#include<queue>
#include<string.h>
using namespace std;
int main()
{
int m,n,v1,v2;
int indegree[102];//入度
bool G[102][102];//邻接数组存储图
memset(indegree,0,sizeof(indegree));
memset(G,0,sizeof(G));
priority_queue<int,vector<int>,greater<int> >pq;
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d",&v1,&v2);
++indegree[v2];
G[v1][v2] = true;
}
for(int i = 1;i<=n;i++)
if(indegree[i]==0)
pq.push(i);
while(!pq.empty())
{
int temp = pq.top();
pq.pop();
printf("%d",temp);
for(int i = 1;i<=n;i++)
{
if(G[temp][i])
{
G[temp][i]=false;
--indegree[i];
if(indegree[i]==0)
pq.push(i);
}
}
}
printf("\n");
return 0;
}
拓扑排序,按字典序输出
最新推荐文章于 2022-09-16 13:01:30 发布