题目链接:https://vjudge.net/problem/HDU-2181

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

思路:dfs和回溯,算一个基础题吧,这里需要邻接矩阵,用bool就可以,也可以用vector,数据小,就用前者了,直接看代码吧,写的比较详细

 #include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <vector>
#include <string> using namespace std; #define inf (1LL << 31) - 1
#define rep(i,j,k) for(int i = j; i <= (k); i++)
#define rep__(i,j,k) for(int i = j; i < (k); i++)
#define per___(i,j,k) for(int i = j; i > (k); i--)
#define per(i,j,k) for(int i = j; i >= (k); i--) const int N = ;
bool mp[N][N]; //邻接矩阵
int in;
bool vis[N]; //记录拜访过的城市,每个dfs的分支都需要一次初始化
int ans; struct node{
int way[N]; //记录路线
int l; //长度
node(int a = ){ l = a; }
}; void input(){ memset(mp, false, sizeof(mp));
int a, b, c;
rep(i, , ){
cin >> a >> b >> c;
mp[i][a] = mp[i][b] = mp[i][c] = true; //能到达的为true
}
} void dfs(int now,node& rec){ //拜访了所有的城市
if (rec.l == ){ //拜访的最后一个城市能不能回到初始城市
if (!mp[now][in]) return; //可以,输出答案
cout << (++ans) << ": ";
rep__(i, , rec.l) cout << " " << rec.way[i];
cout << " " << in << endl;
return;
} rep(i, , ){ //从小到大遍历城市编号,解决了字典序
//能到,没被拜访过
if (mp[now][i] == true && !vis[i]){
vis[i] = true;
rec.way[rec.l++] = i;
dfs(i, rec);
vis[i] = false;//(1)
rec.l--; //(2) (1)(2) 回溯
}
}
} int main(){ input(); node rec; while (cin >> in && in != ){ rec.way[rec.l++] = in; //记录开始的城市
vis[in] = true; //标记已经拜访过的城市
ans = ; dfs(in,rec); rec.l = ; //(1)
vis[in] = false; //(2) (1)(2)回溯
} return ;
}

kuangbin专题 专题二 搜索进阶 哈密顿绕行世界问题 HDU - 2181的更多相关文章

  1. 哈密顿绕行世界问题 HDU 2181

    题意让你先输20行数表示20个城市及所相邻的三个城市(行数就是该城市),然后给你一个数,从这个(给的数就表示城市)城市出发走遍所有城市一次回到出发的城市:看着复杂,仔细想想是个不算太难的深搜题,主要你 ...

  2. 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开

    [kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...

  3. HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  4. HDU2181 哈密顿绕行世界问题 —— DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181 哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) ...

  5. 【HDU - 2181】哈密顿绕行世界问题(dfs+回溯)

    -->哈密顿绕行世界问题 Descriptions: 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市.  Input 前2 ...

  6. HDOJ 2181 哈密顿绕行世界问题

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  7. HDU 2181 哈密顿绕行世界问题 (DFS)

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

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

    哈密顿绕行世界问题 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  9. 哈密顿绕行世界问题(dfs+记录路径)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181 哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) ...

随机推荐

  1. WPF ValidationRule的特点(默认目标-源才校验)

    默认是当目标发生改变时候,通过绑定改变源时候进行校验,因为WPF认为源是安全的,如果想让源改变时候,也进行校验则设置验证规则的ValidatesOnTargetUpdated =true using ...

  2. Styling a ListView with a Horizontal ItemsPanel and a Header

    原文http://eblog.cloudplush.com/2012/05/23/styling-a-listview-with-a-horizontal-itemspanel-and-a-heade ...

  3. qt下的时钟程序(简单美丽,继承自QWidget的Clock,用timer调用update刷新,然后使用paintEvent作画就行了,超详细中文注释)good

    最近抽空又看了下qt,发现用它来实现一些东西真的很容易比如下面这个例子,绘制了个圆形的时钟,但代码却清晰易懂[例子源自奇趣科技提供的例子]因为清晰,所以就只写注释了,吼吼其实也就这么几行代码头文件 / ...

  4. 使用sklearn构建含有标量属性的决策树

    网络上使用sklearn生成决策树的资料很多,这里主要说明遇见标量数据的处理. 经查验参考资料,sklearn并非使用了课上以及书上讲的ID3算法,而是选择了CART,该算法生成二叉树:scikit- ...

  5. Redis实现Timeline

    上回写了[使用Redis实现关注关系][1],这次说说使用Redis实现Timeline. Timeline的实现一般有推模式.拉模式.推拉结合这几种. 推模式:某人发布内容之后推送给所有粉丝,空间换 ...

  6. MASMPlus汇编之简单窗体

    .386 .model flat,stdcall option casemap:none ;include 定义 include   windows.inc include   gdi32.inc i ...

  7. UWP中的消息提示框(二)

    在UWP中的消息提示框(一)中介绍了一些常见的需要用户主动去干涉的一些消息提示框,接下来打算聊聊不需要用户主动去干涉的一些消息提示框.效果就是像双击退出的那种提示框. 先说说比较简单的吧,通过系统To ...

  8. Elevate Web Builder for Web Developers(类似于unigui的东西)

    推荐一款pascal 语言的web 开发工具 这几天仔细研究了一款使用Pascal 语言开发web 的工具 具体介绍可以参照这里. 先上几张他开发的页面照.

  9. DataSet与JSON互转

    DataSetConverter4Delphi https://github.com/ezequieljuliano/DataSetConverter4Delphi ----------------- ...

  10. DIOCP3 DEMO的编译(去掉VCL前缀)

    总有些朋友问我,关于DEMO编译的一些问题,每次都回答大概都差不多,我想还是写篇说明书给大家,关于DEMO编译的步骤. [环境设定] 1.将DIOCP3\source路径添加到Delphi的搜索路径, ...