HDOJ-2181(深搜记录路径)
哈密顿绕行世界问题
HDOJ-2181
1.本题是典型的搜索记录路径的问题
2.主要使用的方法是dfs深搜,在输入的时候对vector进行排序,这样才能按照字典序输出。
3.为了记录路径,我使用的是两个vector,每次找到结果时,将一个vector赋值给另一个,再去输出。在dfs遍历顶点vector的时候,先push_back一个要搜的点,递归回来以后再pop_back
4.本题注意输出的格式
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
using namespace std;
vector<int> v[21];
vector<int> trace;
vector<int> t;
bool vis[21];
int m;
int cnt=0;
void print(){
t.pop_back();
cout<<cnt<<": "<<m<<" ";
for(int i=0;i<t.size();i++){
cout<<t[i]<<" ";
}
cout<<m<<endl;
}
void dfs(int u,int ans){
if(u==m&&ans>=20){
t=trace;
cnt++;
print();
return;
}
for(int i=0;i<v[u].size();i++){
if(!vis[v[u][i]]){
vis[v[u][i]]=1;
trace.push_back(v[u][i]);
dfs(v[u][i],ans+1);
vis[v[u][i]]=0;
trace.pop_back();
}
if(v[u][i]==m&&ans==19){
trace.push_back(v[u][i]);
dfs(v[u][i],ans+1);
trace.pop_back();
}
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int a;
for(int i=1;i<=20;i++){
for(int j=0;j<3;j++){
cin>>a;
v[i].push_back(a);
}
sort(v[i].begin(),v[i].end());
//cout<<v[i][0]<<" "<<v[i][1]<<" "<<v[i][2]<<endl;
}
while(cin>>m&&m){
memset(vis,0,sizeof(vis));
vis[m]=1;
cnt=0;
dfs(m,0);
}
//system("pause");
return 0;
}
HDOJ-2181(深搜记录路径)的更多相关文章
- PTA 7-33 地下迷宫探索(深搜输出路径)
地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时,真心钦佩他们的聪明才智. ...
- POJ 3984 迷宫问题 记录路径的广搜
主要是学一下如何在广搜中记录路径:每找到一个点我就记录下这个点是由那个点得来的,这样我找到最后个点后,我就可以通过回溯得到我走过的路径,具体看代码吧~ #include<cstdio> # ...
- HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)
Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...
- HDOJ/HDU 1015 Safecracker(深搜)
Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kle ...
- POJ 3414 Pots 记录路径的广搜
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- HDOJ 5294 Tricks Device 最短路(记录路径)+最小割
最短路记录路径,同一时候求出最短的路径上最少要有多少条边, 然后用在最短路上的边又一次构图后求最小割. Tricks Device Time Limit: 2000/1000 MS (Java/Oth ...
- ACM/ICPC 之 Floyd+记录路径后继(Hdu1385(ZOJ1456))
需要处理好字典序最小的路径 HDU1385(ZOJ1456)-Minimum Transport //Hdu1385-ZOJ1456 //给定邻接矩阵,求给定起点到终点的最短路径,若有相同路长的路径按 ...
- ****Curling 2.0(深搜+回溯)
Curling 2.0 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total ...
- HDU5723 Abandoned country (最小生成树+深搜回溯法)
Description An abandoned country has n(n≤100000) villages which are numbered from 1 to n. Since aban ...
随机推荐
- POJ - 1654 利用叉积求三角形面积 去 间接求多边形面积
题意:在一个平面直角坐标系,一个点总是从原点出发,但是每次移动只能移动8个方向的中的一个并且每次移动距离只有1和√2这两种情况,最后一定会回到原点(以字母5结束),请你计算这个点所画出图形的面积 题解 ...
- rabbitmq学习二
rabbitmq的六种工作模式: 这里简单介绍下六种工作模式的主要特点: 简单模式:一个生产者,一个消费者 work模式:一个生产者,多个消费者,每个消费者获取到的消息唯一. 订阅模式:一个生产者发送 ...
- python try异常处理
什么是异常 python异常捕获,在刚开始学的时候,经常会遇到两种报错信息:语法错误和执行的异常. 语法错误在执行的时候就会报错,同时控制端会告诉你错误所在的行: 但即便python程序语法是正确的, ...
- k8s二进制部署 - flannel安装
安装Flannel [root@hdss7-21 ~]# cd /opt/src/ [root@hdss7-21 src]# wget https://github.com/coreos/flanne ...
- 2.hello rabbitmq
作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-07-22 22:49:50 星期一 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...
- C++ new delete malloc free
title: C++ new delete malloc free date: 2020-03-10 categories: c++ tags: 语法 C++的new delete malloc fr ...
- 数位dp【模板 + 老年康复】
学习博客: 戳这里 戳这里 "在信息学竞赛中,有这样一类问题:求给定区间中,满足给定条件的某个D 进制数或此类数的数量.所求的限定条件往往与数位有关,例如数位之和.指定数码个数.数的大小顺序 ...
- python3基本数据类型补充
列表 list 有序,可嵌套,可重复,元素可修改 方括号 占用空间小但时间消耗比较大 mylist=["kimi",1,1,1,["amy",18]] V=my ...
- SSH Keys vs GPG Keys
SSH Keys vs GPG Keys SSH Keys SSH keys allow you to establish a secure connection between your compu ...
- 2020 Google 开发者大会
2020 Google 开发者大会 Google Developer Summit https://developersummit.googlecnapps.cn/ Flutter | Web | M ...