#include <iostream>
#include<cstdio>
#include<string.h>
using namespace std;
const int MAXN = 505;
int graph[MAXN][MAXN], indegree[MAXN], ans[MAXN];
int n, m;
void tuopu()
{
//计算入度
for(int i = 1; i<= n; i++)
for(int j = 1; j <= n; j++)
if(graph[i][j])
indegree[j]++;
for(int i = 1; i <= n; i++)
{
int k = 1;
while(indegree[k] != 0)
k++;
ans[i] = k;
indegree[k] = -1;
for(int j = 1; j <= n; j++)
{
if(graph[k][j]) indegree[j]--;//这里写为了if(graph[i][j])终于找到错误了
//cout<< indegree[j] << endl;
}
}
/*for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if(indegree[j] == 0)
}
}*/
}
int main()
{
//freopen("input.txt", "r", stdin);
while(cin >> n >> m)
{
memset(graph, 0, sizeof(graph));
memset(indegree, 0, sizeof(indegree));
memset(ans, 0, sizeof(ans));
int a, b;
for(int i = 0; i < m; i++)
{
cin >> a >> b;
graph[a][b] = 1;
}
tuopu();
for(int i =1; i < n ; i++)
cout << ans[i] << " ";
cout << ans[n] << endl;
}
return 0;
}
[NWPU][2014][TRN][16]图论拓扑排序 E - 基础 HDU 1285
最新推荐文章于 2022-08-01 01:22:59 发布