用Java实现判断一个无向图是否为哈密顿图

下面是用Java实现判断一个无向图是否为哈密顿图的代码:


import java.util.ArrayList;
import java.util.List;

public class HamiltonianGraph {
    public static boolean isHamiltonianGraph(int[][] graph) {
        int n = graph.length;
        List<Integer> path = new ArrayList<>();
        boolean[] visited = new boolean[n];
        return findHamiltonianPath(0, graph, visited, path);
    }

    private static boolean findHamiltonianPath(int u, int[][] graph, boolean[] visited, List<Integer> path) {
        int n = graph.length;
        if (path.size() == n) {
            return graph[u][0] == 1; // 判断是否存在从最后一个节点到起点的路径
        }
        visited[u] = true;
        path.add(u);
        for (int v = 0; v < n; v++) {
            if (graph[u][v] == 1 && !visited[v]) {
                if (findHamiltonianPath(v, graph, visited, path)) {
                    return true;
                }
            }
        }
        visited[u] = false;
        path.remove(path.size() - 1);
        return false;
    }

    public static void main(String[] args) {
        int[][] graph = {
                {0, 1, 0, 1, 0},
                {1, 0, 1, 1, 1},
                {0, 1, 0, 0, 1},
                {1, 1, 0, 0, 1},
                {0, 1, 1, 1, 0}
        };
        boolean isHamil = isHamiltonianGraph(graph);
        System.out.println("Is Hamiltonian graph? " + isHamil);
    }
}
 

      这个实现使用了递归的方式,在图中查找哈密顿路径(Hamiltonian Path)。其中`graph`是一个二维邻接矩阵,`visited`是一个标记数组,记录每个节点是否被访问过。函数`findHamiltonianPath`的参数`u`是当前处理的节点,`path`是已经走过的路径。

在每次递归中,如果`path`中已经包含了所有的节点,则判断是否存在从最后一个节点到起点的路径,即判断矩阵中`graph[u][0]`是否为1。如果不是,则递归回溯,尝试其它的选择路径。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值