UVA 10305 拓扑排序

来源:互联网 发布:神雕侠侣06版源码 编辑:程序博客网 时间:2024/06/05 10:54
Ordering Tasks
Time Limit: 3000MS  64bit IO Format: %lld & %llu

Submit Status uDebug

Description

Download as PDF
Problem descriptions:
System Crawler 2016-08-23
Initialization.
acmparand 2013-08-23


#include"iostream"#include"stdio.h"#include"vector"#include"functional"#include"string"#include"cstring"#include"algorithm"#include"queue"using namespace std;typedef pair<int,int> pii;typedef vector<int> vi;const int maxn=200;int cnt[maxn];int g[maxn][maxn];int visit[maxn];int topo[maxn];int t;int n,m;bool dfs(int u){    visit[u]=-1; //正在访问    for(int v=0;v<n;v++)    {        if(g[u][v])        {            if(visit[v]<0) return false; //自环 与u邻接的点正在被访问            else if(!visit[v])                dfs(v);  //未访问 就去访问它        }    }    visit[u]=1; //标记为访问    topo[--t]=u;    return true;}bool topo_sort(){    t=n;    memset(visit,0,sizeof(visit));    for(int u=0;u<n;u++)    if(!visit[u])    {        bool res=dfs(u);        if(res==false) return false; //有自环    }    return true;}int main(){    /*    freopen("b.in","r",stdin);    freopen("b.out","w",stdout);    */    while(cin>>n>>m&&(n+m))    {        int i;        memset(g,0,sizeof(g));        for(i=0;i<m;i++)        {            int u,v;            scanf("%d%d",&u,&v);            u--;v--;            g[u][v]=1;        }        bool fuck=topo_sort();        if(fuck==false) {cout<<"No"<<endl;continue;}        for(i=0;i<n-1;i++)            cout<<topo[i]+1<<" ";        cout<<topo[n-1]+1<<endl;    }    return 0;}

#include"iostream"#include"stdio.h"#include"vector"#include"functional"#include"string"#include"cstring"#include"algorithm"#include"queue"using namespace std;typedef pair<int,int> pii;typedef vector<int> vi;const int maxn=200;vi g[maxn];int visit[maxn];int topo[maxn];int t,n,m;bool dfs(int u){    visit[u]=-1; //正在访问    for(int i=0;i<g[u].size();i++)    {        int v=g[u][i];        if(visit[v]<0) return false; //自环 与u邻接的点正在被访问        else if(!visit[v])            dfs(v);  //未访问 就去访问它    }    visit[u]=1; //标记为访问    topo[--t]=u;    return true;}bool topo_sort(){    t=n;    memset(visit,0,sizeof(visit));    for(int u=0;u<n;u++)    if(!visit[u])    {        bool res=dfs(u);        if(res==false) return false; //有自环    }    return true;}int main(){    /*    freopen("b.in","r",stdin);    freopen("b.out","w",stdout);    */    while(cin>>n>>m&&(n+m))    {        int i;        memset(g,0,sizeof(g));        for(i=0;i<m;i++)        {            int u,v;            scanf("%d%d",&u,&v);            u--;v--;            g[u].push_back(v);        }        bool fuck=topo_sort();        if(fuck==false) {cout<<"No"<<endl;continue;}        for(i=0;i<n-1;i++)            cout<<topo[i]+1<<" ";        cout<<topo[n-1]+1<<endl;    }    return 0;}



0 0
原创粉丝点击