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. linux设备驱动编写_tasklet机制(转)

    在编写设备驱动时, tasklet 机制是一种比较常见的机制,通常用于减少中断处理的时间,将本应该是在中断服务程序中完成的任务转化成软中断完成. 为了最大程度的避免中断处理时间过长而导致中断丢失,有时 ...

  2. Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace

    Oracle正则表达式函数:regexp_like.regexp_substr.regexp_instr.regexp_replace   --去掉所有特殊字符,只剩字母  SELECT REGEXP ...

  3. POJ水题 1298

    #include "stdafx.h" #include <iostream> #include <string> using namespace std; ...

  4. 基于SpringBoot项目的https

    在spring中配置项目运行的端口很简单. 在application.properties中 server.port: 这样配置后,spring boot内嵌的tomcat服务器就是跑在8080端口启 ...

  5. 2016年GitHub排名前20的Python机器学习开源项目(转)

    当今时代,开源是创新和技术快速发展的核心.本文来自 KDnuggets 的年度盘点,介绍了 2016 年排名前 20 的 Python 机器学习开源项目,在介绍的同时也会做一些有趣的分析以及谈一谈它们 ...

  6. Unity5中叹为观止的实时GI效果

    http://www.manew.com/thread-43970-1-1.html 今天为大家分享unity与Alex Lovett共同使用unity5制作的Shrine Arch-viz Demo ...

  7. 025-ViewData、ViewBag与TempData概述

    Action向View传递数据很简单,方式也很多,最直接的就是我们向View传递Model,这本身就是MVC的意义所在.如果是显示一些消息,像是错误信息,可以使用ViewData.ViewBag.Te ...

  8. python 练习 10

    #!/usr/bin/python # -*- coding: UTF-8 -*- i = int(raw_input('净利润:')) arr = [1000000,600000,400000,20 ...

  9. CentOS下安装setuptools、pip和virtualenv

    已经安装了Python,现在我们可以最终确定完成应用程序生产和部署的基础知识.为此,我们将设立两个最常用的工具:PIP封装经理和virtualenv中的环境管理. 一.安装setuptools set ...

  10. hdu----(5056)Boring count(贪心)

    Boring count Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...