题目链接
题目大意:
套用拓扑排序
拓扑排序便是找入度为零的点,所以我们在生成图的同时统计各点的入度个数。然后配合队列即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
int matrix[maxn][maxn];
int indegree[maxn];
int n;
void toposort() {
bool flag = true;
queue<int> queue1;
for(int i = 1; i<=n; i++) {
if(!indegree[i])
queue1.push(i);
}
while(!queue1.empty()) {
int cur = queue1.front(); queue1.pop();
if(flag) { cout << cur ; flag = false; }
else cout << " " << cur;
for(int i = 1; i <= n; i++) {
if(matrix[cur][i]) {
indegree[i]--;
if(!indegree[i])
queue1.push(i);
}
}
}
}
int main()
{
int m,a,b;
while(cin >> n >> m && (n || m)) {
memset(matrix,0,sizeof(matrix));
memset(indegree,0,sizeof(indegree));
for(int i = 1; i <= m; i++) {
cin >> a >> b;
if(!matrix[a][b]) {
matrix[a][b] = 1;
indegree[b]++;
}
}
toposort();
cout << endl;
}
return 0;
}