拓扑排序。
注意看题。。。不是输出拓扑序而是输出点在拓扑序中的位置,
感觉只有我会被这种东西坑。。。
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<cstring>
#include<map>
#include<string>
#include<stack>
#include<queue>
#include<utility>
#include<iostream>
#include<algorithm>
const int maxn = 105, Nya = -1;
int n, m;
int g[maxn][maxn];
int rd[maxn];
int ans[maxn];
bool loop = false;
int main()
{
#ifndef ONLINE_JUDGE
freopen("sgu230.in","r",stdin);
freopen("sgu230.out","w",stdout);
#endif
std::cin >> n >> m;
for(int i = 1, u, v; i <= m; i++)
std::cin >> u >> v, g[u][v] ++, rd[v]++;
for(int i = 1, t; i <= n; i++)
{
for(t = 1; t <= n; t++)
if(rd[t] == 0) break;
if(t > n) {loop = true;break;}
for(int j = 1; j <= n; j++)
if(g[t][j]) rd[j]-= g[t][j];
ans[t] = i, rd[t]--;
}
if(loop)
std::cout << "No solution" << std::endl;
else
for(int i = 1; i <= n; i++)
std::cout << ans[i] << ' ';
#ifndef ONLINE_JUDGE
fclose(stdin);
fclose(stdout);
#endif
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。