UVa10305 Ordering Tasks

来源:互联网 发布:关于网络文学社的建议 编辑:程序博客网 时间:2024/05/23 00:00

        题意:n个任务,m组顺序要求,输出一组任务的排序,能满足所有要求。

        思路:DFS,拓扑排序。最先访问到的任务肯定是可以作为最后完成的,如果还有需要在这之后完成的,一定会更早访问到。图中可能会有多个连通分量,但是它们之间的顺序是无关紧要的。


#include <iostream>         #include <stdio.h>         #include <cmath>         #include <algorithm>         #include <iomanip>         #include <cstdlib>         #include <string>         #include <memory.h>         #include <vector>         #include <queue>         #include <stack>         #include <map>       #include <set>       #include <ctype.h>         #define INF 1000000010     #define ll long long     #define max3(a,b,c) max(a,max(b,c))     #define MAXN 1000using namespace std;     vector<int> E[110];int vis[110];stack<int> s;void _sort(int x){vis[x]=true;int siz=E[x].size();for(int i=0;i<siz;i++){if(!vis[E[x][i]]){_sort(E[x][i]);}}s.push(x);}int main(){int n,m;while(cin>>n>>m){if(n==0&&m==0)break;memset(vis,0,sizeof(vis));for(int i=1;i<=m;i++){int a,b;cin>>a>>b;E[a].push_back(b);}for(int i=1;i<=n;i++){if(!vis[i])_sort(i);}while(!s.empty()){int cur=s.top(); s.pop();cout<<cur;if(!s.empty())cout<<" ";}cout<<endl;}return 0;}


0 0
原创粉丝点击