DFS || HDU 2181

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

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

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

dfsdfsdfsdfsdfsdfs…………

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define SZ 2010
bool vis[22];
int path[22];
struct node
{
    int a, b, c;
}city[22];
int ct[22][3];
int cnt = 0;
int m;
void dfs(int x, int k)
{
    path[k] = x;
    for(int i = 1; i <= 3; i++)
    {
        int t = ct[x][i];
        if(t == m && k == 19)
        {
            cnt++;
            printf("%d: ", cnt);
            for(int i = 0; i < 20; i++) printf(" %d", path[i]);
            printf(" %d\n", m);
            return;
        }
        if(t == m) continue;
        if(!vis[t])
        {
            vis[t] = 1;
            dfs(t, k+1);
            vis[t] = 0;
        }
    }
}
int main()
{
    for(int i = 1; i <= 20; i++)
        for(int j = 1; j <= 3; j++)
            scanf("%d", &ct[i][j]);
    for(int i = 1; i <= 20; i++) sort(ct[i]+1, ct[i]+4);
    while(true)
    {
        scanf("%d", &m);
        if(m == 0) break;
        cnt = 0;
        memset(vis, 0, sizeof(vis));
        vis[m] = 1;
        dfs(m, 0);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/pinkglightning/p/9551440.html

时间: 2024-10-31 01:14:36

DFS || HDU 2181的相关文章

D - DFS HDU - 2660

D - DFS HDU - 2660 I have N precious stones, and plan to use K of them to make a necklace for my mother, but she won't accept a necklace which is too heavy. Given the value and the weight of each precious stone, please help me find out the most valua

HDU 2181 哈密顿绕行世界问题【DFS】

题意:给出一个十二面体,它的每个顶点是一个城市,从一个城市m出发并回到m,输出所有可行的路径 先把边记录下来,再深搜 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<set>

HDU 2181 DFS

Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行以后每行有1个数m,m<=20,m>=1.m=0退出. Output 输出从第m个城市出发经过每个城市1次又回到m的所有路线,如有多条路线,按字典序输出,每行1条路线.每行首先输出是第几条路线.然后个一个: 后列出经过的城市.参看Sample output

HDU - 2181 C - 哈密顿绕行世界问题(DFS

题目传送门 C - 哈密顿绕行世界问题 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input 前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第20行以后每行有1个数m,m<=20,m>=1.m=0退出. Output 输出从第m个城市出发经过每个城市1次又回到m的所有路线,如有多条路线,按字典序输出,每行1条路线.每行首先输出是第几条路线.然后个一个: 后列出经过的城市.参看Sample output

HDU 2181 哈密顿绕行世界问题 (dfs)

Sample Input 2 5 20 1 3 12 2 4 10 3 5 8 1 4 6 5 7 19 6 8 17 4 7 9 8 10 16 3 9 11 10 12 15 2 11 13 12 14 20 13 15 18 11 14 16 9 15 17 7 16 18 14 17 19 6 18 20 1 13 19 5 0 Sample Output 1 #include <iostream> 2 3 using namespace std; 4 5 int Map[21][21

变形课(DFS hdu 1181)

变形课 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 19133    Accepted Submission(s): 6892 Problem Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规

(水DFS) hdu 5024

D - Wang Xifeng's Little Plot Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 5024 Appoint description:  System Crawler  (2015-04-14) Description <Dream of the Red Chamber>(also <The Sto

DFS HDU 1342

很水的DFS Lotto Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1515    Accepted Submission(s): 752 Problem Description In a Lotto I have ever played, one has to select 6 numbers from the set {1,2

DFS HDOJ 2181 哈密顿绕行世界问题

题目传送门 题意:中文题面 分析:直接排完序后DFS.这样的题以后不应该再写题解的. #include <bits/stdc++.h> using namespace std; vector<int> G[21]; int ans[21]; int v[3]; bool vis[21]; int cnt; void print() { printf ("%d: ", ++cnt); for (int i=0; i<20; ++i) { printf (&q