HDU 2181-哈密顿绕行世界问题(裸dfs)

原创 2015年11月19日 18:11:28
E - 哈密顿绕行世界问题
Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
Appoint description: 

Description

一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市。 
 

Input

前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行以后每行有1个数m,m<=20,m>=1.m=0退出. 
 

Output

输出从第m个城市出发经过每个城市1次又回到m的所有路线,如有多条路线,按字典序输出,每行1条路线.每行首先输出是第几条路线.然后个一个: 后列出经过的城市.参看Sample output 
 

Sample Input

2 5 20 1 3 12 2 4 10 3 5 8 1 4 6 5 7 19 6 8 17 4 7 9 8 10 16 3 9 11 10 12 15 2 11 13 12 14 20 13 15 18 11 14 16 9 15 17 7 16 18 14 17 19 6 18 20 1 13 19 5 0
 

Sample Output

1: 5 1 2 3 4 8 7 17 18 14 15 16 9 10 11 12 13 20 19 6 5 2: 5 1 2 3 4 8 9 10 11 12 13 20 19 18 14 15 16 17 7 6 5 3: 5 1 2 3 10 9 16 17 18 14 15 11 12 13 20 19 6 7 8 4 5 4: 5 1 2 3 10 11 12 13 20 19 6 7 17 18 14 15 16 9 8 4 5 5: 5 1 2 12 11 10 3 4 8 9 16 15 14 13 20 19 18 17 7 6 5 6: 5 1 2 12 11 15 14 13 20 19 18 17 16 9 10 3 4 8 7 6 5 7: 5 1 2 12 11 15 16 9 10 3 4 8 7 17 18 14 13 20 19 6 5 8: 5 1 2 12 11 15 16 17 18 14 13 20 19 6 7 8 9 10 3 4 5 9: 5 1 2 12 13 20 19 6 7 8 9 16 17 18 14 15 11 10 3 4 5 10: 5 1 2 12 13 20 19 18 14 15 11 10 3 4 8 9 16 17 7 6 5 11: 5 1 20 13 12 2 3 4 8 7 17 16 9 10 11 15 14 18 19 6 5 12: 5 1 20 13 12 2 3 10 11 15 14 18 19 6 7 17 16 9 8 4 5 13: 5 1 20 13 14 15 11 12 2 3 10 9 16 17 18 19 6 7 8 4 5 14: 5 1 20 13 14 15 16 9 10 11 12 2 3 4 8 7 17 18 19 6 5 15: 5 1 20 13 14 15 16 17 18 19 6 7 8 9 10 11 12 2 3 4 5 16: 5 1 20 13 14 18 19 6 7 17 16 15 11 12 2 3 10 9 8 4 5 17: 5 1 20 19 6 7 8 9 10 11 15 16 17 18 14 13 12 2 3 4 5 18: 5 1 20 19 6 7 17 18 14 13 12 2 3 10 11 15 16 9 8 4 5 19: 5 1 20 19 18 14 13 12 2 3 4 8 9 10 11 15 16 17 7 6 5 20: 5 1 20 19 18 17 16 9 10 11 15 14 13 12 2 3 4 8 7 6 5 21: 5 4 3 2 1 20 13 12 11 10 9 8 7 17 16 15 14 18 19 6 5 22: 5 4 3 2 1 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 23: 5 4 3 2 12 11 10 9 8 7 6 19 18 17 16 15 14 13 20 1 5 24: 5 4 3 2 12 13 14 18 17 16 15 11 10 9 8 7 6 19 20 1 5 25: 5 4 3 10 9 8 7 6 19 20 13 14 18 17 16 15 11 12 2 1 5 26: 5 4 3 10 9 8 7 17 16 15 11 12 2 1 20 13 14 18 19 6 5 27: 5 4 3 10 11 12 2 1 20 13 14 15 16 9 8 7 17 18 19 6 5 28: 5 4 3 10 11 15 14 13 12 2 1 20 19 18 17 16 9 8 7 6 5 29: 5 4 3 10 11 15 14 18 17 16 9 8 7 6 19 20 13 12 2 1 5 30: 5 4 3 10 11 15 16 9 8 7 17 18 14 13 12 2 1 20 19 6 5 31: 5 4 8 7 6 19 18 17 16 9 10 3 2 12 11 15 14 13 20 1 5 32: 5 4 8 7 6 19 20 13 12 11 15 14 18 17 16 9 10 3 2 1 5 33: 5 4 8 7 17 16 9 10 3 2 1 20 13 12 11 15 14 18 19 6 5 34: 5 4 8 7 17 18 14 13 12 11 15 16 9 10 3 2 1 20 19 6 5 35: 5 4 8 9 10 3 2 1 20 19 18 14 13 12 11 15 16 17 7 6 5 36: 5 4 8 9 10 3 2 12 11 15 16 17 7 6 19 18 14 13 20 1 5 37: 5 4 8 9 16 15 11 10 3 2 12 13 14 18 17 7 6 19 20 1 5 38: 5 4 8 9 16 15 14 13 12 11 10 3 2 1 20 19 18 17 7 6 5 39: 5 4 8 9 16 15 14 18 17 7 6 19 20 13 12 11 10 3 2 1 5 40: 5 4 8 9 16 17 7 6 19 18 14 15 11 10 3 2 12 13 20 1 5 41: 5 6 7 8 4 3 2 12 13 14 15 11 10 9 16 17 18 19 20 1 5 42: 5 6 7 8 4 3 10 9 16 17 18 19 20 13 14 15 11 12 2 1 5 43: 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 44: 5 6 7 8 9 16 17 18 19 20 1 2 12 13 14 15 11 10 3 4 5 45: 5 6 7 17 16 9 8 4 3 10 11 15 14 18 19 20 13 12 2 1 5 46: 5 6 7 17 16 15 11 10 9 8 4 3 2 12 13 14 18 19 20 1 5 47: 5 6 7 17 16 15 11 12 13 14 18 19 20 1 2 3 10 9 8 4 5 48: 5 6 7 17 16 15 14 18 19 20 13 12 11 10 9 8 4 3 2 1 5 49: 5 6 7 17 18 19 20 1 2 3 10 11 12 13 14 15 16 9 8 4 5 50: 5 6 7 17 18 19 20 13 14 15 16 9 8 4 3 10 11 12 2 1 5 51: 5 6 19 18 14 13 20 1 2 12 11 15 16 17 7 8 9 10 3 4 5 52: 5 6 19 18 14 15 11 10 9 16 17 7 8 4 3 2 12 13 20 1 5 53: 5 6 19 18 14 15 11 12 13 20 1 2 3 10 9 16 17 7 8 4 5 54: 5 6 19 18 14 15 16 17 7 8 9 10 11 12 13 20 1 2 3 4 5 55: 5 6 19 18 17 7 8 4 3 2 12 11 10 9 16 15 14 13 20 1 5 56: 5 6 19 18 17 7 8 9 16 15 14 13 20 1 2 12 11 10 3 4 5 57: 5 6 19 20 1 2 3 10 9 16 15 11 12 13 14 18 17 7 8 4 5 58: 5 6 19 20 1 2 12 13 14 18 17 7 8 9 16 15 11 10 3 4 5 59: 5 6 19 20 13 12 11 10 9 16 15 14 18 17 7 8 4 3 2 1 5 60: 5 6 19 20 13 14 18 17 7 8 4 3 10 9 16 15 11 12 2 1 5
 

思路:
   这题看起来好像好难的样子,其实就是裸dfs而已,按字典序输出只要排一下序就OK了。


AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
typedef long long ll;
using namespace std;
#define T 25
#define inf 0x3f3f3f3f
vector< int > v[T];
int n,cnt=0;
bool vis[T];
vector<int> t;
void dfs(int x)
{
	if(t.size()==20&&x==n){
		printf("%d:  %d",++cnt,n);
		for(int i=0;i<t.size();++i){
			printf(" %d",t[i]);
		}printf("\n");
		return;
	}
	if(t.size()==20)return;
	for(int i=0;i<v[x].size();++i){
		int d = v[x][i];
		if(!vis[d]){
		  vis[d] = true;
		  t.push_back(d);
		  dfs(d);
		  t.pop_back();
		  vis[d] = false;
		}
	}
}
int main()
{
#ifdef zsc
 freopen("input.txt","r",stdin);
#endif
 
 int m,u,vv,i;
 for(i=1;i<=20;++i){
	 scanf("%d%d%d",&m,&u,&vv);
	 v[i].push_back(m);v[i].push_back(vv);
	 v[i].push_back(u);
	 sort(v[i].begin(),v[i].end());
 }
 memset(vis,false,sizeof(vis));
 while(scanf("%d",&n),n)
 {
	 dfs(n);
	 t.clear();
 }
 for(i=0;i<T;++i){
	 v[i].clear();
 }
    return 0;
}


版权声明:本文为博主原创文章,转载必须声明出处,thank。

HDU-2181 哈密顿绕行世界问题

题目: http://acm.hdu.edu.cn/showproblem.php?pid=2181 题意: TSP问题,20个城市,每个城市与三个城市相连,输出从某个城市开始遍历所有城市的所有...
  • kopyh
  • kopyh
  • 2015年09月25日 22:16
  • 547

hdu 2181 哈密顿绕行世界问题,深度优先搜索求解

http://acm.hdu.edu.cn/showproblem.php?pid=2181         这是我写的第一个博客,仅作为参考,大牛们见了不要见笑哈。         本题首先就是...
  • wchyumo2009
  • wchyumo2009
  • 2012年03月22日 20:16
  • 2792

哈密顿绕行世界问题

Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市。   Input ...
  • a997930294
  • a997930294
  • 2014年07月26日 09:57
  • 1062

hdu2181C - 哈密顿绕行世界问题

http://acm.hdu.edu.cn/showproblem.php?pid=2181 这是一个dfs搜索题目,难点在于剪枝,以及路径还原;下面是给出代码及其详解 /* 回溯方法的深度理解 ...
  • yuanjunlai141
  • yuanjunlai141
  • 2015年10月24日 20:21
  • 295

HDU2181---哈密顿绕行世界问题

#include #include using namespace std; int map[25][4],vis[25],des[25]; int n,cas=1; void dfs(int no...
  • hy1405430407
  • hy1405430407
  • 2015年06月15日 20:56
  • 465

HDOJ 2181 哈密顿绕行世界问题

题意:有二十个节点,求出不重复的遍历所有节点的所有路径,按字典序输出路径 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181 思路:回溯+dfs ...
  • luminous11
  • luminous11
  • 2015年03月17日 22:26
  • 282

hdu 2181 哈密顿绕行世界问题 dfs

B - 哈密顿绕行世界问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit S...
  • HowardEmily
  • HowardEmily
  • 2016年10月23日 15:43
  • 231

哈密顿绕行世界问题 ----dfs

哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota...
  • bless924295
  • bless924295
  • 2017年05月16日 21:38
  • 89

哈密顿绕行世界问题(dfs)

http://acm.hdu.edu.cn/showproblem.php?pid=2181 哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others...
  • JHC23
  • JHC23
  • 2013年04月17日 20:39
  • 418

哈密顿绕行世界问题 (dfs)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181Problem Description一个规则的实心十二面体,它的 20个顶点标出世界著名的20个...
  • qq_40482358
  • qq_40482358
  • 2018年02月08日 21:35
  • 40
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 2181-哈密顿绕行世界问题(裸dfs)
举报原因:
原因补充:

(最多只允许输入30个字)