2039 骑马修栅栏 USACO[图论—欧拉路]

来源:互联网 发布:看报纸的软件 编辑:程序博客网 时间:2024/04/28 14:25
#include<iostream>#include<cstdio>#include<algorithm>#include<vector>using namespace std;const int MN=512;struct edge{    int u,v,w;}k;//vector<edge>t[MN];int m,n;int t[MN][MN],way[MN],d[MN],cnt=0; void find(int k){//find_circuit(结点i){    for(int i=1;i<=n;i++){//当结点i有邻居时        if(t[k][i]){//{  选择任意一个邻居j;            t[k][i]--;            t[i][k]--;//删除边(i,j)或者做访问标记;            find(i);//find_circuit(结点j);        }    }    way[++cnt]=k;//      输出或存储节点i;}int main(){    cin>>m;    int u,v;    for(int i=0;i!=m;i++){        cin>>u>>v;        t[u][v]++;        t[v][u]++;        d[u]++;        d[v]++;//exist        n=max(n,max(u,v));    }//  for(int i=1;i<=n;i++){//      cout<<d[i]<<endl;//  }    int k1=600,k2=600;    for(int i=1;i<=n;i++){        if(d[i]&1)k1=min(k1,i);        else if(d[i])k2=min(k2,i);    }    if(k1!=600)find(k1);        else find(k2);    for(int i=cnt;i>=1;i--){        cout<<way[i]<<endl;    }    return 0;}
0 0
原创粉丝点击