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

原创 2012年03月22日 20:16:34

http://acm.hdu.edu.cn/showproblem.php?pid=2181

        这是我写的第一个博客,仅作为参考,大牛们见了不要见笑哈。

        本题首先就是要建立一个城市连接的地图,然后从起始位置开始深度优先遍历每一个城市找个满足条件的路径,给以打印。用以存储地图的开辟一个二维数组。其他基本比较简单。详细看下面的代码:

#include <stdio.h>
#include <string.h>

#define MAX 21
#define bool int
#define false 0
#define true 1

bool map[MAX][MAX];//实心体地图
bool used[MAX];//标记城市走过

int res[MAX];//保存当前走过的路径

int num;//记录打印到了第几个
int cas;

void init()
{
	int a, b, c, i;
	for(i = 1; i <= 20; ++ i){
		scanf("%d%d%d",&a, &b, &c);
		map[i][a] = true;
		map[i][b] = true;
		map[i][c] = true;
	}
}

void dfs(int dep, int count)
{
	int i, j;
	res[count] = dep;
	if(count == 19){
		if(map[dep][cas]){
			printf("%d:  ", ++ num);
			for(i = 0; i < 20; ++ i){
				printf("%d ", res[i]);
			}
			printf("%d\n", res[0]);
		}
		return;
	}
	for(j = 1; j <= 20; j ++){
		if(map[dep][j] && !used[j]){
			used[j] = true;
			dfs(j, count+1);
			used[j] = false;
		}
	}
}

int main()
{
/*	freopen("input.txt","r+",stdin);
	freopen("output.txt","w+",stdout);*/
	memset(map,0,sizeof(map));
	init();
	while(scanf("%d",&cas), cas){
		num = 0 ;
		memset(used, false, sizeof(used));
		memset(res, 0, sizeof(res));
		used[cas] = true;
		dfs(cas, 0);
	}
	return 0;
}


哈密顿绕行世界问题

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

哈密顿绕行世界问题

一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市。  Input前20行的第i行有3个数,表示与第i个城市相邻的3个城市...
  • fengkuangdewoniudada
  • fengkuangdewoniudada
  • 2017年05月18日 18:20
  • 94

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

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

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

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

HDU 2181 哈密顿绕行世界问题 (求一个图的所有哈密顿回路)

HDU 2181 哈密顿绕行世界问题 (求一个图的所有哈密顿回路)
  • u013790563
  • u013790563
  • 2015年06月23日 20:30
  • 1088

hdu2181C - 哈密顿绕行世界问题

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

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

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

HDU2181:哈密顿绕行世界问题(DFS)

Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市。    Input 前2...
  • libin56842
  • libin56842
  • 2013年11月10日 15:19
  • 2158

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
  • 461

HDU2181 哈密顿绕行世界问题 dfs

哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota...
  • xky140610205
  • xky140610205
  • 2016年08月11日 11:06
  • 1851
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu 2181 哈密顿绕行世界问题,深度优先搜索求解
举报原因:
原因补充:

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