题意:给你一个n表示有n个任务,有m次操作
每次有一个a,b,表示a任务必须放在b任务之前完成;
问你任务该怎么安排?
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int mp[105][105];
int vis[105];
int main()
{
int n, m;
while (cin >> n >> m)
{
int x, y;
memset(mp, 0, sizeof(mp));
memset(vis, 0, sizeof(vis));
for (int i = 0; i < m; i++)
{
cin >> x >> y;
if (!mp[x][y])
{
mp[x][y] = 1;
vis[y]++;//表示第y个任务之前有多少个任务未完成
}
}
for (int i = 1; i <= n; i++)//输出n次
{
for (int j = 1; j <= n; j++)//判断第j个元素能否输出
{
if (vis[j] == 0)
{
vis[j]--;
if (i != n)
{
cout << j << ' ';
}
else
{
cout << j;
}
for (int k = 1; k <= n; k++)
{
if (mp[j][k]==1)
{
vis[k]--;
}
}
break;
}
}
}
cout << endl;
}
return 0;
}