Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- void escriu_solucio(const vector<int> &sp, int n)
- {
- if (n > 0) {
- cout << sp[0];
- }
- for (int i = 1; i < n; i++) {
- cout << " " << sp[i];
- }
- cout << endl;
- }
- void ordenatopo(const vector<vector<int> > &dep, vector<int> &ge, vector<int> &sp, int n, int m, int q)
- {
- if (q == n) {
- escriu_solucio(sp, n);
- } else {
- for (int i = 0; i < n; i++) {
- if (ge[i] == 0) {
- for (int j = 0; j < dep[i].size(); j++) {
- ge[dep[i][j]]--;
- }
- sp[q] = i;
- ge[i]--; //Used
- ordenatopo(dep, ge, sp, n, m, q+1);
- ge[i]++; //Not used
- sp[q] = -1;
- for (int j = 0; j < dep[i].size(); j++) {
- ge[dep[i][j]]++;
- }
- }
- }
- }
- }
- int main()
- {
- int n, m;
- cin >> n >> m;
- vector<int> ge(n, 0);
- vector<vector<int> > dep(n);
- for (int i = 0; i < m; i++) {
- int first, second;
- cin >> first >> second;
- dep[first].push_back(second);
- ge[second]++;
- }
- vector<int> sp(n, -1);
- ordenatopo(dep, ge, sp, n, m, 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement