题目
思路
拓扑排序水题,数据范围很小,所以用暴力的方式是可以解决的
代码
#include <iostream>
#include <cstring>
#define MAXX 1000
using namespace std;
int map[MAXX][MAXX];
int ans[MAXX], in[MAXX];
void topsort(int N)
{
int t = 0;
for (int i = 1; i <= N; ++i)
{
for (int j = 1; j <= N; ++j)
{
if (!in[j])
{
ans[i] = j;//把答案记录下来
in[j]--; //标记为-1,类似于删除了
t = j;
break;
}
}
//查找入读为0的这个点,对应的所有的出度的点
for (int j = 1; j <= N; ++j)
{
if (map[t][j] == 1)
{
in[j]--; //入度减去
}
}
}
}
int main()
{
int N, M;
while (cin >> N >> M)
{
memset(map, 0, sizeof map);
memset(in, 0, sizeof in);
while (M--)
{
int x, y;
cin >> x >> y;
if (map[x][y] == 0) //一定要有这个判断***********
{
map[x][y] = 1;
in[y]++;
}
}
topsort(N);
for (int i = 1; i < N; ++i)
cout << ans[i] << ' ';
cout << ans[N] << endl;
}
return 0;
}