拓扑排序应用 hdu 1285-CSDN博客

90 阅读1分钟
#include<iostream>
#include<cstring>
using namespace std;


const int maxn = 512;
int map[maxn][maxn], dgr[maxn];//indegree 入度,map 网,地图 
int m, n;


void toposort() {//拓扑排序 
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++) {
			if (dgr[j] == 0) {//若入度为0,继续 
				dgr[j] = -1;//删除 
				cout << j;//输出 
				if (i == n) cout << endl;
				else cout << " ";//格式控制 
				for (int k = 1; k <= n; k++)//更新 
					if (map[j][k] == 1)
						dgr[k]--;
				break;
			}
		}
}


int main() {
	//freopen("data.in","r",stdin);
	while (cin >> n >> m) {
		for (int i = 0; i<m; i++) {
			int a, b;
			cin >> a >> b;//a优先于b 
			if (map[a][b] == 0) {//避免重复统计 
				map[a][b] = 1;
				dgr[b]++;
			}
		}
		toposort();
	}
	return 0;
}

\