【Java每日一题,dfs】哈密顿绕行世界问题

简介: 【Java每日一题,dfs】哈密顿绕行世界问题

Introduction

牛牛子想当嘉然小姐的狗,但嘉然小姐喜欢的是猫,于是他在纸上画了一个规则的实心十二面体,这个十二面体上面的 20个顶点标出的20个国家,牛牛子想从一个国家出发经过每个国家恰好一次后回到出发的国家。但是他不懂,你能帮帮他吗?


Input

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


Output

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


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

Solution

import java.util.Scanner;
public class Main5 {
    static int[][] graph=new int[21][21];
    static int[] vis=new int[21];
    static int[] ans=new int[22];
    static int k;
    static int num=1;
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        for (int i=1;i<=20;i++){
            for (int j=1;j<=3;j++){
                graph[i][j]=s.nextInt();
            }
        }
        while (true){
            k=s.nextInt();
            if (k==0)break;
            num=1;
            dfs(k,1);
        }
    }
    static void dfs(int x,int step){
        if(step==21&&x==k){
            System.out.print(num+": ");
            for(int i=1;i<=20;i++){
                System.out.print(" "+ans[i]);
            }
            System.out.print(" "+x);
            System.out.println();
            num++;
            return;
        }
        if(vis[x]==1){
            return;
        }
        vis[x]=1;
        ans[step]=x;
        for (int i=1;i<=3;i++){
            int next=graph[x][i];
            dfs(next,step+1);
        }
        vis[x]=0;
        ans[step]=0;
    }
}

Experience

首先要想到是dfs

相关文章
|
9月前
|
Java
【Java每日一题,dfs】矩阵查找字符串
【Java每日一题,dfs】矩阵查找字符串
|
9月前
|
机器学习/深度学习 Java
【Java每日一题,dfs】Find The Multiple
【Java每日一题,dfs】Find The Multiple
|
9月前
|
机器学习/深度学习 Java
【Java每日一题,dfs】洛谷P1162 填涂颜色
【Java每日一题,dfs】洛谷P1162 填涂颜色
|
9月前
|
机器学习/深度学习 Java
【Java每日一题,深度搜索dfs】棋盘问题
【Java每日一题,深度搜索dfs】棋盘问题
|
9月前
|
Java
【Java每日一题,dfs】挖出最大财宝
【Java每日一题,dfs】挖出最大财宝
|
21天前
|
数据采集 算法 Java
DFS(深度搜索)无向图遍历(JAVA手把手深入解析)
DFS(深度搜索)无向图遍历(JAVA手把手深入解析)
48 0
|
9月前
|
机器学习/深度学习 Java
【Java每日一题,dfs】[USACO1.5]八皇后 Checker Challenge
【Java每日一题,dfs】[USACO1.5]八皇后 Checker Challenge
|
12月前
|
Java
数据结构(11)图的遍历,DFS、BFS的JAVA实现
11.1.图的遍历 图的遍历,即将图内所有顶点都访问一遍。 有两种遍历方式: BFS DFS 以下图的遍历为例:
62 0
|
人工智能 Java BI
力扣207:课程表(Java拓扑排序:bfs+dfs)
力扣207:课程表(Java拓扑排序:bfs+dfs)
104 0
力扣200:岛屿数量(Java dfs+bfs)
给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。