http://acm.hdu.edu.cn/showproblem.php?pid=2181

只有20个城市,而且每个点的度数恰好是3,也就意味着,对于即将进入环中的点,入度1,出度2,下一个点只有两种可能

暴力枚举出所有的路径,也不过3*2^18,之后对于每个点作为起点的情况分别调整即可

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. int e[21][3];
  6. bool vis[21];
  7. struct circle{
  8. int a[20];
  9. circle(){}
  10. circle(int b[20]){
  11. for(int i=0;i<20;i++)a[i]=b[i];
  12. }
  13. bool operator <(circle c2)const {//便于按字典序排序
  14. for(int i=0;i<20;i++){
  15. if(a[i]<c2.a[i])return true;
  16. else if(a[i]>c2.a[i])return false;
  17. }
  18. return false;
  19. }
  20. void rot(int m){//调整成以m为起点
  21. int ind=0;
  22. for(;ind<20&&a[ind]!=m;ind++){}
  23. int b[20];
  24. for(int i=0;i<20;i++){
  25. b[i]=a[(i+ind)%20];
  26. }
  27. for(int i=0;i<20;i++){
  28. a[i]=b[i];
  29. }
  30. }
  31. }c[100000];
  32. int cnum;
  33. int heap[20];
  34. void dfs(int s,int f,int cnt){
  35. vis[s]=true;
  36. heap[cnt-1]=s;
  37. if(cnt==20){
  38. for(int i=0;i<3;i++){
  39. if(e[s][i]==f){
  40. c[cnum++]=circle(heap);
  41. }
  42. }
  43. vis[s]=false;
  44. return ;
  45. }
  46. for(int i=0;i<3;i++){
  47. if(!vis[e[s][i]]){
  48. dfs(e[s][i],f,cnt+1);
  49. }
  50. }
  51. vis[s]=false;
  52. }
  53. int main(){
  54. int m;
  55. for(int i=1;i<=20;i++){
  56. for(int j=0;j<3;j++){
  57. scanf("%d",e[i]+j);
  58. }
  59. }
  60. dfs(1,1,1);
  61. while(scanf("%d",&m)==1&&m!=0){
  62. for(int i=0;i<cnum;i++){
  63. c[i].rot(m);
  64. }
  65. sort(c,c+cnum);
  66. for(int i=0;i<cnum;i++){
  67. printf("%d: ",i+1);
  68. for(int j=0;j<20;j++){
  69. printf("%d ",c[i].a[j]);
  70. }
  71. printf("%d\n",m);
  72. }
  73. }
  74. return 0;
  75. }

HDU 2181 哈密顿绕行世界问题 dfs 难度:1的更多相关文章

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

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

  2. HDU - 2181 哈密顿绕行世界问题 dfs图的遍历

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

  3. (step4.3.8)hdu 2181(哈密顿绕行世界问题——DFS)

    题目大意:通俗点讲就是,输出所有从m城市出发,便利所有城市之后又能回到m城市的序列...... 解题思路:DFS 1)用map[][]来存储城市之间的连通情况.用used[]存储某个城市的使用情况(即 ...

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

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

  5. hdu 2181 哈密顿绕行世界问题【DFS】

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

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

    Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数, ...

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

    题目链接:https://vjudge.net/contest/185350#problem/C 题目大意:一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城 ...

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

    Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数, ...

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

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

随机推荐

  1. mysql delimiter

    默认情况下,mysql遇到分号; 就认为是一个命令的终止符, 就会执行命令.而有些时候,我们不希望这样,比如存储过程中包含多个语句,这些语句以分号分割,我们希望这些语句作为一个命令,一起执行,怎么解决 ...

  2. (四)C语言柔性数组、指针赋值

    一.柔性数组 今天看了公司的代码,发现一个很奇怪的问题,后来自己写了类似代码,我先把代码贴出来吧. #include<stdio.h> #include<string.h> # ...

  3. C++—函数

    一.函数的基本知识 要使用C++函数,必须完成一下工作: (1)提供函数定义: (2)提供函数原型: (3)调用函数. 1.定义函数 可以将函数分为两类,有返回值的函数和没有返回值的函数.没有返回值的 ...

  4. oracle对象类型

    Oracle的对象类型 对象类型 在PL/SQL中,面向对象的程序设计师基于对象类型来完成的.对象类型是用户自定义的一种复合数据类型,它封装了数据结构和用于操纵这些数据结构的过程和函数. 数据库的对象 ...

  5. Oracle 遇到的错误及处理整理 - 记录

    1. 启动监听提示: TNS-: TNS:permission denied TNS-: TNS:protocol adapter error TNS-: Insufficient privilege ...

  6. listview某一项不可点击

    listview 整个都不可操作 listview.setEnable(false); listview 某一项不可点击 重写 isEnable()方法,在方法内部判断position,不可点击的项 ...

  7. 如何设置session过期时间为30分钟

    今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: “如何设置一个30分钟过期的Session?”, 大家不要觉得看似简单, 这里面包含的知识挺多, 特别适合考察 ...

  8. phalcon(费尔康)框架学习笔记

    phalcon(费尔康)框架学习笔记 http://www.qixing318.com/article/phalcon-framework-to-study-notes.html 目录结构   pha ...

  9. phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序

    phalcon:数据库分库,读写分离,负载均衡 系统方法执行顺序 用命名空间区分不同的数据库实例,对应代码结构上是不同的目录区分,在同一目录下基类负责初始化连接.连接来自初始化时注入的多个db服务 隐 ...

  10. 在XP下把win7安装到VHD,内存足够大可以RAMOS

    在XP下把win7安装到VHD,内存足够大可以RAMOS1.用DiskGenius创建VHD固定大小磁盘文件,以win7vhd.vhd为例,然后进行分区格式化,格式化时启用NTFS压缩.2.进入WIN ...