10305

来源:互联网 发布:易语言qq空间秒赞源码 编辑:程序博客网 时间:2024/06/09 16:45

简单的题目,拓扑排序,记录好边与边之间的关系以及顶点的入度,根据关系进行更新就可以了,源代码如下:

#include<iostream>#include<vector>#include<string>#include<set>#include<stack>#include<queue>#include<map>#include<algorithm>#include<cmath>#include<iomanip>#include<cstring>#include<sstream>using namespace std;int n, m;int in[110];int main(){while (cin >> n >> m){if (n == 0 && m == 0) break;memset(in, 0, sizeof(in));vector<vector<int>> area(n+1);for (int i = 0; i < m; i++){int a, b;cin >> a >> b;in[b]++;area[a].push_back(b);}int amount = 0;vector<int> res;stack<int> st;while (true){for (int i = 1; i <= n; i++){if (in[i] == 0){in[i]--;st.push(i);}}while (!st.empty()){int t = st.top();st.pop();res.push_back(t);amount++;for (int i = 0; i < area[t].size(); i++){int index = area[t][i];in[index]--;}}if (amount == n) break;}for (int i = 0; i < res.size(); ){cout << res[i];i++;if (i != res.size()) cout << " ";else cout << endl;}}return 0;}