题目链接: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. JS 中click和onclick的区别

    1.onclick是绑定事件,告诉浏览器在鼠标点击时候要做什么 2.click本身是方法,作用是触发onclick事件,只要执行了元素的click()方法,就会触发onclick事件

  2. 一步一步造个IoC轮子(三):构造基本的IoC容器

    一步一步造个Ioc轮子目录 一步一步造个IoC轮子(一):Ioc是什么 一步一步造个IoC轮子(二):详解泛型工厂 一步一步造个IoC轮子(三):构造基本的IoC容器 定义容器 首先,我们来画个大饼, ...

  3. WPF滚动条嵌套,响应鼠标滑轮事件的处理

    在C# 中,两个ScrollViewer嵌套在一起或者ScrollViewer里面嵌套一个ListBox.Listview(控件本身有scrollviewer)的时候,我们本想要的效果是鼠标滚动整个S ...

  4. window 10 64bit Tortoise SVN 图标状态显示不正常

    https://www.cnblogs.com/lzpong/p/6187366.html 根据以上帖子处理 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows ...

  5. 零元学Expression Blend 4 - Chapter 37 看如何使用Clip修出想要的完美曲线(上)

    原文:零元学Expression Blend 4 - Chapter 37 看如何使用Clip修出想要的完美曲线(上) 几何外部的 UIElement 会在呈现的配置中以视觉化方式裁剪. 几何不一定要 ...

  6. 处理 Windows Phone 应用中的“后退”按钮 (XAML)

    与电脑不同,所有 Windows Phone 设备都有“后退”按钮,它允许用户在应用的页面之间向后导航.如果用户在转到应用的第一页时再次按“后退”按钮,操作系统会挂起你的应用并将用户导航到应用启动前的 ...

  7. 为什么360、百度、腾讯出的Mac端云盘客户端都只有同步盘?(用户量小,同步盘开发成本低,Linux下都没有客户端)

    如题,顾名思义,同步盘是用来同步的,不具备增量的功能,像这三家在Windows端出的客户端都是即有同步也有增量的. 陆续出来的,可能大家更多的是跟随策略,不得不提dropbox是这样的形式.mac电脑 ...

  8. clipboard.js在剪切中的使用

    目前只是对文字的复制. 下面的代码解释: 1.html 需要添加data-clipboard="copy"和data-clipboard-target="对象选择器&qu ...

  9. Spring MVC的工作原理,我们来看看其源码实现

    前言 开心一刻 晚上陪老丈人吃饭,突然手机响了,我手贱按了免提……哥们:快出来喝酒!哥几个都在呢!我:今天不行,我现在陪老丈人吃饭呢.哥们:那你抓紧喝,我三杯白酒,把我岳父放倒了才出来的,你也快点.看 ...

  10. WebBrowser执行脚本和调用外部方法

    控制WebBrowser实际上就是控制IE,最简单的方法就是执行javascript或vbscript,省去了接口的转换.如何执行脚本?以前我一直用mshtml中IHTMLWindow2接口的exec ...