HDU 2181 哈密顿绕行世界问题 dfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=2181
只有20个城市,而且每个点的度数恰好是3,也就意味着,对于即将进入环中的点,入度1,出度2,下一个点只有两种可能
暴力枚举出所有的路径,也不过3*2^18,之后对于每个点作为起点的情况分别调整即可
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int e[21][3];
bool vis[21];
struct circle{
int a[20];
circle(){}
circle(int b[20]){
for(int i=0;i<20;i++)a[i]=b[i];
}
bool operator <(circle c2)const {//便于按字典序排序
for(int i=0;i<20;i++){
if(a[i]<c2.a[i])return true;
else if(a[i]>c2.a[i])return false;
}
return false;
}
void rot(int m){//调整成以m为起点
int ind=0;
for(;ind<20&&a[ind]!=m;ind++){}
int b[20];
for(int i=0;i<20;i++){
b[i]=a[(i+ind)%20];
}
for(int i=0;i<20;i++){
a[i]=b[i];
}
}
}c[100000];
int cnum;
int heap[20];
void dfs(int s,int f,int cnt){
vis[s]=true;
heap[cnt-1]=s;
if(cnt==20){
for(int i=0;i<3;i++){
if(e[s][i]==f){
c[cnum++]=circle(heap);
}
}
vis[s]=false;
return ;
}
for(int i=0;i<3;i++){
if(!vis[e[s][i]]){
dfs(e[s][i],f,cnt+1);
}
}
vis[s]=false;
}
int main(){
int m;
for(int i=1;i<=20;i++){
for(int j=0;j<3;j++){
scanf("%d",e[i]+j);
}
}
dfs(1,1,1);
while(scanf("%d",&m)==1&&m!=0){
for(int i=0;i<cnum;i++){
c[i].rot(m);
}
sort(c,c+cnum);
for(int i=0;i<cnum;i++){
printf("%d: ",i+1);
for(int j=0;j<20;j++){
printf("%d ",c[i].a[j]);
}
printf("%d\n",m);
}
}
return 0;
}
HDU 2181 哈密顿绕行世界问题 dfs 难度:1的更多相关文章
- 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 ...
- (step4.3.8)hdu 2181(哈密顿绕行世界问题——DFS)
题目大意:通俗点讲就是,输出所有从m城市出发,便利所有城市之后又能回到m城市的序列...... 解题思路:DFS 1)用map[][]来存储城市之间的连通情况.用used[]存储某个城市的使用情况(即 ...
- HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)
哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 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个城市,你从一个城市出发经过每个城 ...
- HDU 2181 哈密顿绕行世界问题
Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数, ...
- HDU2181 哈密顿绕行世界问题 —— DFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181 哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) ...
随机推荐
- POJ 2063 Investment 完全背包
题目链接:http://poj.org/problem?id=2063 今天果然是卡题的一天.白天被hdu那道01背包的变形卡到现在还没想通就不说了,然后晚上又被这道有个不大也不小的坑的完全背包卡了好 ...
- Android控件之Button(按钮控件)和ImageButton(图片按钮控件)
一.Button和ImageButton特证: 1.共同特证: 都可以作为一个按钮产生点击事件 2.不同特证: Button有text的属性,ImageButton没有 ImageButton有src ...
- J2EE 第二阶段项目之部署项目、分工安排
SVN 先通过使用教程,和能够介绍了解svn. svn使用教程总结 ; svn功能介绍. 分工安排:我的任务就是项目统计. 1 效益统计 1 教育效益统计表 (教育效益统计表,增,改,查看,查 ...
- Spring MVC 之拦截器(八)
在springMVC中实现拦截器有两种方式 1.实现HandlerInterceptor接口 2.继承HandlerInterceptorAdaptor类 编写拦截器: package com.cy ...
- hiho_1139_二分+bfs搜索
题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值. 题目链接:二分 最小化最大值,考虑采用二分搜索.对所有的边长进 ...
- hiho1093_spfa
题目 SPFA模板题,题目中数据可能有两个点之间有多条边直接相连,使用 unordered_map< int, unordered_map< int, int>>, 来存储图的 ...
- 线性表 - 从零开始实现by C++
参考链接:数据结构探险之线性表篇 线性表
- Android 应用开发耗电量控制。。
当程序启动手机越多的模块,那耗电就越快 当你的程序运行时只占用CPU的时候,这时候耗电量是最少的. 当然这时候如果cpu的运行速度很慢那是最好的.. 程序耗电量控制首要从下面3个方面抓起: 1.频繁的 ...
- Link Collecting
----------------------------------\ ACM入门总结之常见输入输出格式暨hdu1089~1096 题解,谨献给对acm感兴趣的新人 - 博客频道 - CSDN.NET ...
- java集合框架之java HashMap代码解析
java集合框架之java HashMap代码解析 文章Java集合框架综述后,具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 源自http://www.codeceo.com/arti ...