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) ...
随机推荐
- mysql delimiter
默认情况下,mysql遇到分号; 就认为是一个命令的终止符, 就会执行命令.而有些时候,我们不希望这样,比如存储过程中包含多个语句,这些语句以分号分割,我们希望这些语句作为一个命令,一起执行,怎么解决 ...
- (四)C语言柔性数组、指针赋值
一.柔性数组 今天看了公司的代码,发现一个很奇怪的问题,后来自己写了类似代码,我先把代码贴出来吧. #include<stdio.h> #include<string.h> # ...
- C++—函数
一.函数的基本知识 要使用C++函数,必须完成一下工作: (1)提供函数定义: (2)提供函数原型: (3)调用函数. 1.定义函数 可以将函数分为两类,有返回值的函数和没有返回值的函数.没有返回值的 ...
- oracle对象类型
Oracle的对象类型 对象类型 在PL/SQL中,面向对象的程序设计师基于对象类型来完成的.对象类型是用户自定义的一种复合数据类型,它封装了数据结构和用于操纵这些数据结构的过程和函数. 数据库的对象 ...
- Oracle 遇到的错误及处理整理 - 记录
1. 启动监听提示: TNS-: TNS:permission denied TNS-: TNS:protocol adapter error TNS-: Insufficient privilege ...
- listview某一项不可点击
listview 整个都不可操作 listview.setEnable(false); listview 某一项不可点击 重写 isEnable()方法,在方法内部判断position,不可点击的项 ...
- 如何设置session过期时间为30分钟
今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...
- phalcon(费尔康)框架学习笔记
phalcon(费尔康)框架学习笔记 http://www.qixing318.com/article/phalcon-framework-to-study-notes.html 目录结构 pha ...
- phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序
phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序 用命名空间区分不同的数据库实例,对应代码结构上是不同的目录区分,在同一目录下基类负责初始化连接.连接来自初始化时注入的多个db服务 隐 ...
- 在XP下把win7安装到VHD,内存足够大可以RAMOS
在XP下把win7安装到VHD,内存足够大可以RAMOS1.用DiskGenius创建VHD固定大小磁盘文件,以win7vhd.vhd为例,然后进行分区格式化,格式化时启用NTFS压缩.2.进入WIN ...