(step4.3.8)hdu 2181(哈密顿绕行世界问题——DFS)
题目大意:通俗点讲就是,输出所有从m城市出发,便利所有城市之后又能回到m城市的序列......
解题思路:DFS
1)用map[][]来存储城市之间的连通情况.用used[]存储某个城市的使用情况(即某一个城市是否被访问过).用res[]保存路径
。如res[count] = dep ; 表示的是第count不访问的城市是dep。用cas表示目标城市的序号
代码如下:
/*
* 2181_2.cpp
*
* Created on: 2013年8月22日
* Author: Administrator
*/ #include <iostream> using namespace std; /**
* map[][] :用来保存城市之间的连通情况
* used[] :用来 保存城市的使用情况
* res[] :用来保存路径
* cas :目标城市的标号
*/
const int maxn = 21;
bool map[maxn][maxn];
bool used[maxn];
int res[maxn];
int cas;
int num = 1; /**
* dep :当前访问城市
* count :当前访问的城市数
*/
void dfs(int dep, int count) {
int i; //第count个所到达的城市是dep
res[count] = dep;
if (count == 19) { //19步能涉及20个城市
if (map[dep][cas]) {
printf("%d: ", num++);
for (i = 0; i < 20; ++i) {
printf(" %d", res[i]);
}
printf(" %d", cas);
printf("\n");
} return;
} for (i = 1; i <= 20; ++i) {
/**
* map[dep][j] :从城市dep到城市j的连通情况
*/
//如果城市dep与城市j连通&&城市j没有使用过
if (map[dep][i] && !used[i]) {
used[i] = true;
dfs(i, count + 1);
used[i] = false;
}
}
}
int main() {
memset(map, 0, sizeof(map));
memset(res, 0, sizeof(res));
memset(used, false, sizeof(used));
int i;
int a, b, c;
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;
} while (scanf("%d", &cas) != EOF, cas) {
used[cas] = true;
dfs(cas, 0);
}
}
(step4.3.8)hdu 2181(哈密顿绕行世界问题——DFS)的更多相关文章
- HDU 2181 哈密顿绕行世界问题 (DFS)
哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU - 2181 哈密顿绕行世界问题 dfs图的遍历
哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 2181 哈密顿绕行世界问题 dfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=2181 只有20个城市,而且每个点的度数恰好是3,也就意味着,对于即将进入环中的点,入度1,出度2,下一个点只有两 ...
- HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)
哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 2181 哈密顿绕行世界问题
Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数, ...
- hdu 2181 哈密顿绕行世界问题【DFS】
题目链接 题目大意: Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input ...
- HDU 2181 哈密顿绕行世界问题(DFS)
Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数, ...
- HDU 2181 哈密顿绕行世界问题 (DFS)
题目链接:https://vjudge.net/contest/185350#problem/C 题目大意:一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城 ...
- HDU2181 哈密顿绕行世界问题 —— DFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181 哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) ...
随机推荐
- Jboss image upload and http access to show image--reference
question I am uploading images to jboss server by getting the absolute path using the following code ...
- [转] 再叙TIME_WAIT
http://huoding.com/2013/12/31/316 之所以起这样一个题目是因为很久以前我曾经写过一篇介绍TIME_WAIT的文章,不过当时基本属于浅尝辄止,并没深入说明问题的来龙去脉, ...
- Android进阶笔记03:Android应用中实现查看"附近的人"的功能
1. 要实现" 附近的人" 这功能,然后就研究了下: (1)首先要做的就是要获取到自己当前位置的经纬度(编程获取手机GPS定位模块的信息,进而获取自己当前位置的经纬度) (2)然后 ...
- css 权威指南笔记(一)
零零散散接触css将近5年,俨然已经成为一个熟练工.如果不是换份工作,我不知道自己差的那么远:在qunar的转正review中我这种“知其然而不知其所以然” 的状况被标明,我才意识到我已停步不前近两年 ...
- Java——(十)网络编程
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.Java的基本网络支持 Java为网络支持提供了java.net包,该包下的URL和URLC ...
- Java-Android 之电话拨号源码
file:///F:/workspace3/Android_ver2.4/src/cn/szy/com/MainActivity.java package cn.szy.com; import and ...
- JAva Collections类方法详解
http://blog.csdn.net/lskyne/article/details/8961014 Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素 ...
- NetAdvantage webdatagrid 控件的一些属性
属性: 1 behaviors 行为下的属性集合 Row Selectors 主要用于设置行选择样式与形为的集合 Enable 属性表示是否启用 Row Selectors下的属性设置 RowNumB ...
- power desinger 学习笔记<二>
power designer 设计表时显示注释选项 PowerDesigner设计时表显示注释选项: 选定编辑的表,右键- > Properties- > Columns- > Cu ...
- JavaScript_变量的自动转换和语句
JS自动类型转换 var a = 1; var b = true; "==" 表示 可以自动类型转换,比较的是数值 "===" 表示可以自动类型转换,先比较数值 ...