首页 > 其他 > 详细

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

时间:2015-09-01 19:56:03      阅读:319      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!