哈密顿路径在图G中找出一条包含所有顶点的简单路径,该路径称为哈密顿路径(1)图G是非完全有向图,且图G不一定存在哈密顿路径; > (2)设计算法判断图G是否存在哈密顿路径,如果存在,输出一天哈密顿路径

简介: 哈密顿路径在图G中找出一条包含所有顶点的简单路径,该路径称为哈密顿路径(1)图G是非完全有向图,且图G不一定存在哈密顿路径; > (2)设计算法判断图G是否存在哈密顿路径,如果存在,输出一天哈密顿路径

1、问题描述

在图G中找出一条包含所有顶点的简单路径,该路径称为哈密顿路径

2、基本要求

(1)图G是非完全有向图,且图G不一定存在哈密顿路径;

(2)设计算法判断图G是否存在哈密顿路径,如果存在,输出一天哈密顿路径即可;

(3)分析算法的时间复杂度

3、设计思想

寻找哈密顿路径的过程是一个深度优先遍历的过程。在遍历过程中,如果有回溯,说明遍历经过的路线中存在重复访问的节点,所以,可以修改深度优先遍历算法,使其在遍历过程中取消回溯。

以下代码仅供参考

以下代码仅供参考

以下代码仅供参考

/**
 *作者:魏宝航
 *2020年11月22日,下午21:47
 */
import java.io.IOException;
import java.util.Scanner;
public class MatrixUDG {
    private char[] mVexs;       
    private int[][] mMatrix;   
    private int num;
    private int edge;
    private boolean[] visit;
    private int[] road;
    private static int count=0;
    private int m=0;
    public MatrixUDG(char[] vexs, char[][] edges) {
        num = vexs.length;
        edge = edges.length;
        visit=new boolean[num+10];
        road=new int[num+10];
        mVexs = new char[num];
        for (int i = 0; i < mVexs.length; i++)
            mVexs[i] = vexs[i];
        mMatrix = new int[num][num];
        for(int i=0;i<edge;i++){
            for(int j=0;j<edge;j++){
                if(edges[i][j]=='∞'){
                    mMatrix[i][j]=Integer.MAX_VALUE;
                }
                else{
                    mMatrix[i][j]=1;
                }
            }
        }
    }
    public void print() {
        System.out.printf("Martix Graph:\n");
        for (int i = 0; i < mVexs.length; i++) {
            for (int j = 0; j < mVexs.length; j++){
                if(mMatrix[i][j]<Integer.MAX_VALUE){
                    System.out.printf("%d ", mMatrix[i][j]);
                }else{
                    System.out.print("∞ ");
                }
            }
            System.out.printf("\n");
        }
    }
    public void DFS(int v){
        visit[v]=true;
        road[count++]=v;
        for(m=0;m<num;m++){
            if(mMatrix[v][m]==1&&visit[m]==false){
                DFS(m);
            }
        }
        if(m==num){
            visit[v]=false;
            count--;
        }
    }
    public void Hamilton(){
        for(int i=0;i<num;i++){
            DFS(i);
        }
        System.out.print(road[0]+1);
        for(int i=1;i<num;i++){
            System.out.print("->"+(road[i]+1));
        }
    }
    public static void main(String[] args) {
        char[] vexs2={'1','2','3','4'};
        char[][] edges2=new char[][]{
                {'∞','1','1','∞'},
                {'∞','∞','∞','∞'},
                {'∞','1','∞','1'},
                {'∞','1','∞','∞'},
        };
        MatrixUDG g=new MatrixUDG(vexs2,edges2);
        g.print();
        g.Hamilton();
    }
}


目录
相关文章
|
5月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
47 4
|
5月前
|
存储 SQL 算法
LeetCode题目113:多种算法实现 路径总和ll
LeetCode题目113:多种算法实现 路径总和ll
|
1月前
|
数据采集 监控 安全
厂区地图导航制作:GIS技术与路径导航算法融合
在智能化、数字化时代,GIS技术为厂区的运营管理带来了革命性变化。本文探讨了如何利用GIS技术,通过数据采集、地图绘制、路径规划、位置定位和信息查询等功能,打造高效、精准的智能厂区地图导航系统,提升企业的竞争力和管理水平。
47 0
厂区地图导航制作:GIS技术与路径导航算法融合
|
3月前
|
算法
基于多路径路由的全局感知网络流量分配优化算法matlab仿真
本文提出一种全局感知网络流量分配优化算法,针对现代网络中多路径路由的需求,旨在均衡分配流量、减轻拥塞并提升吞吐量。算法基于网络模型G(N, M),包含N节点与M连接,并考虑K种不同优先级的流量。通过迭代调整每种流量在各路径上的分配比例,依据带宽利用率um=Σ(xm,k * dk) / cm来优化网络性能,确保高优先级流量的有效传输同时最大化利用网络资源。算法设定收敛条件以避免陷入局部最优解。
|
4月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
41 1
|
5月前
|
存储 算法 Unix
掌握Unix路径简化:五种有效算法比较【python力扣71题】
掌握Unix路径简化:五种有效算法比较【python力扣71题】
|
5月前
|
存储 算法 机器人
路径规划的艺术:不同路径 II 的算法深掘【python力扣63题】
路径规划的艺术:不同路径 II 的算法深掘【python力扣63题】
|
5月前
|
存储 算法 数据挖掘
穿越障碍:最小路径和的高效算法比较【python力扣题64】
穿越障碍:最小路径和的高效算法比较【python力扣题64】
|
4月前
|
数据采集 存储 算法
「AIGC算法」图搜索算法详解
本文探讨了图搜索算法,包括遍历和最短路径搜索。DFS和BFS是遍历算法,前者使用栈深入搜索,后者用队列逐层遍历。Dijkstra、Bellman-Ford、A*、Floyd-Warshall和Johnson算法则解决最短路径问题。文中还给出了DFS的Python实现示例。这些算法在路径规划、网络分析等领域有重要应用。
80 0
|
5月前
|
存储 SQL 算法
LeetCode题目112:多种算法实现路径总与改进过程
LeetCode题目112:多种算法实现路径总与改进过程