您的位置:首页 > 其它

John's trip

2015-06-05 23:55 176 查看

http://poj.org/problem?id=1041

#include<iostream>

#include<string>

using namespace std;

int map[50][2000],adj[50][2000],num[50],mark[2000],stk[2000],idx,S,top;

int cmp(const void *a,const void *b)

{

 return *(int*)a-*(int*)b;

}

int Min(int x,int y)

{

 return x<y?x:y;

}

void dfs(int u)

{

 int i,v,e;

 for(i=1;i<=num[u];i++)

 {

  e=adj[u][i];

  if(!mark[e])

  {

   v=map[u][e];

   mark[e]=1;

   dfs(v);

   stk[++top]=e;

  }

 }

}

int main()

{

 int x,y,z,i,maxN;

// freopen("C:\\Users\\John\\Desktop\\hi.txt","r",stdin);

 while(cin>>x>>y,x && y)

 {

  memset(num,0,sizeof(num));

  cin>>z;

  S=Min(x,y);

  adj[x][++num[x]]=z;

  adj[y][++num[y]]=z;

  map[x][z]=y;

  map[y][z]=x;

  

  while(cin>>x>>y,x && y)

  {

   cin>>z;

   adj[x][++num[x]]=z;

   adj[y][++num[y]]=z;

   map[x][z]=y;

   map[y][z]=x;

  }

  for(i=1;;i++)

  {

   if(num[i]==0)

    break;

   if(num[i] & 1)

    break;

  }

  if(num[i]!=0)

  {

   cout<<"Round trip does not exist."<<endl;

   continue;

  }

  maxN=i-1;

  for(i=1;i<=maxN;i++)

   qsort(adj[i]+1,num[i],sizeof(int),cmp);

  memset(mark,0,sizeof(mark));

  top=0;

  dfs(S);

  for(i=top;i>1;i--)

   cout<<stk[i]<<" ";

  cout<<stk[i]<<endl;

 } 

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: