zoukankan      html  css  js  c++  java
  • HDU2181 哈密顿绕行世界问题

    题目:

    一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市。 

    输入:

    前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行以后每行有1个数m,m<=20,m>=1.m=0退出. 

    输出:

    输出从第m个城市出发经过每个城市1次又回到m的所有路线,如有多条路线,按字典序输出,每行1条路线.每行首先输出是第几条路线.然后个一个: 后列出经过的城市.参看Sample output 

     样例:

    分析:DFS回溯,注意题目要求的是回路

     1 #include<iostream>
     2 #include<sstream>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<string>
     6 #include<cstring>
     7 #include<algorithm>
     8 #include<functional>
     9 #include<iomanip>
    10 #include<numeric>
    11 #include<cmath>
    12 #include<queue>
    13 #include<vector>
    14 #include<set>
    15 #include<cctype>
    16 #define PI acos(-1.0)
    17 const int INF = 0x3f3f3f3f;
    18 const int NINF = -INF - 1;
    19 typedef long long ll;
    20 using namespace std;
    21 int map[25][5];
    22 int m, rec;
    23 int vis[25];
    24 int ans[25];
    25 void dfs(int x, int t)
    26 {
    27     for (int i = 0; i < 3; ++i)
    28     {
    29         if (t == 19 && map[x][i] == m)
    30         {
    31             cout << ++rec << ":  ";
    32             for (int i = 0; i < 20; ++i)
    33                 cout << ans[i] << ' ';
    34             cout << m << endl;
    35             return;
    36         }
    37         if (!vis[map[x][i]])
    38         {
    39             vis[map[x][i]] = 1;
    40             ans[t + 1] = map[x][i];
    41             dfs(map[x][i], t + 1);
    42             vis[map[x][i]] = 0;
    43         }
    44     }
    45 }
    46 int main()
    47 {
    48     for (int i = 1; i <= 20; ++i)
    49         cin >> map[i][0] >> map[i][1] >> map[i][2];
    50     while (cin >> m)
    51     {
    52         if (m == 0) break;
    53         memset(vis, 0, sizeof(vis));
    54         vis[m] = 1;
    55         ans[0] = m;
    56         rec = 0;
    57         dfs(m, 0);
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    Difference Between Arraylist And Vector : Core Java Interview Collection Question
    Man's Best Friend: The Science Behind the Dog and Human Relationship
    我在微软那些事--微软面试
    北美PM活着的攻略
    C#图解教程 第二十一章 命名空间和程序集
    C#图解教程 第二十章 异步编程
    C#图解教程 第十九章 LINQ
    C#图解教程 第十八章 枚举器和迭代器
    C#图解教程 第十七章 泛型
    C#图解教程 第十六章 转换
  • 原文地址:https://www.cnblogs.com/veasky/p/11019856.html
Copyright © 2011-2022 走看看