码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ-3332(竞赛图中的哈密顿路径)

时间:2015-09-01 19:59:19      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:

题意:n个点n*(n-1)/2条有向边,求每个点遍历一次的顺序,否则输出Impossible。

思路:简单dfs遍历。以每个点为起点遍历,直到找出解;

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int t,n,m,temp,flag;
int num[5050],vis[5050];
int mm[505][505];
void dfs(int v){
  num[temp++]=v;
  if(temp==n){
    flag=1;return;
  }
  for(int i=1;i<=n;i++){
    if(mm[v][i]==1&&!vis[i]){
        vis[i]=1;
        dfs(i);
        if(flag==1) return;
        temp--; //不能忘
        vis[i]=0;
    }
  }
}
int main(){
   int i,j,k,u,v;
   while(scanf("%d",&t)!=EOF){
     while(t--){
       scanf("%d",&n);
       m=n*(n-1)/2;
       memset(vis,0,sizeof(vis));
       memset(mm,0,sizeof(mm));
       for(i=0;i<m;i++){
         scanf("%d%d",&u,&v);
         mm[u][v]=1;
       }
       flag=0;
       for(i=1;i<=n;i++){
         temp=0;
         vis[i]=1;
         dfs(i);
         if(flag) break;
         vis[i]=0;
       }
       if(flag){
           for(int i=0;i<n;i++){
            if(i<n-1){
              printf("%d ",num[i]);
            }
            else printf("%d\n",num[i]);
          }
       }
      else printf("Impossible\n");
     }
   }
   return 0;
}

 

ZOJ-3332(竞赛图中的哈密顿路径)

标签:

原文地址:http://www.cnblogs.com/dominating/p/4776569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!