给任务排序(Ordering Tasks,UVa 10305)

来源:互联网 发布:smallpdf软件下载 编辑:程序博客网 时间:2024/06/05 03:48

原题链接

分析:拓扑排序

#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<string>#include<map>#include<cmath>#include<sstream>#include<queue>#include<cctype>using namespace std;typedef long long ll;#define MAX 105int G[MAX][MAX];int vis[MAX];int ans[MAX];int m,n,t;bool dfs(int u) {        vis[u] = -1;        for(int v=1;v<=n;v++)                if(G[u][v])                if(!vis[v] && !dfs(v)) return false;        ans[t--] = u;        vis[u] = 1;        return true;}bool toposort() {        memset(vis,0,sizeof(vis));        for(int u=1;u<=n;u++) if(!vis[u])                if(!dfs(u)) return false;        return true;}int main() {        while(~scanf("%d%d",&n,&m) && (n || m)) {                memset(G,0,sizeof(G));                int a,b;                for(int i=0;i<m;i++) {                        scanf("%d%d",&a,&b);;                        G[a][b] = 1;                }                t = n;                toposort();                for(int i=1;i<=n;i++) i == n?printf("%d\n",ans[i]):printf("%d ",ans[i]);        }        return 0;}


0 0
原创粉丝点击