【问题标题】:Recursive Backtracking in simple graph简单图中的递归回溯
【发布时间】:2015-11-18 14:43:09
【问题描述】:

想象一下下面的简单图表:

每个实体都有一个从 0 开始的索引(因此 A 的索引为 0,B 的索引为 1,依此类推)。

A 和 B 是相连的,所以它们之间的距离是 1,所以 f.e. A 和 D 之间的距离为 2,因为它们都与 F 相连。

如何在java中实现一个方法,将两个索引和一个距离作为参数,并执行递归回溯,以确定两个给定实体是否在给定距离内可达???

所以,如果我用参数(3,0,2)调用方法,那么它应该返回true,因为3是D,0是A,它们之间的距离是2,所以它是真的。

我尝试过的:

public boolean backtracking(int index0, int index1, int d) {

    boolean reachable = relation[index0][index1];

    if (d > 0 && !reachable) {
        for (int i = index0+1; i <= index1+d; i++) {
            backtracking(index0+1, index1, d-1);
        }
    }

    return reachable;
}

我有一个邻接矩阵与二维布尔数组关系中的关系,基于图。

提前致谢

【问题讨论】:

  • 到目前为止你写了什么,有什么不足的地方?
  • 您尝试过的代码在哪里?
  • 我更新了我的问题。

标签: java recursion graph backtracking adjacency-matrix


【解决方案1】:

以下代码可以满足您的需求。

canReach 方法是一种递归方法。如果允许的distance 小于零,那么我们返回 false。如果给canReach 的节点等于这个,那么它是可达的。否则,迭代Node的邻居,距离减1。

代码:

public class Node {
    private Set<Node> neighbours = new HashSet<Node>();

    public Node() {
    }

    public void connect(Node node) {
        if (neighbours.add(node))
            node.connect(this);
    }

    public boolean canReach(Node node, int distance) {
        if (distance < 0)
            return false;
        if (this.equals(node)) {
            return true;
        } else {
            for (Node neighbour : neighbours)
                if (neighbour.canReach(node, distance - 1))
                    return true;
            return false;
        }
    }
}

private Graph() {
    Node a = new Node();
    Node b = new Node();
    Node c = new Node();
    Node d = new Node();
    Node e = new Node();
    Node f = new Node();
    a.connect(b);
    b.connect(c);
    b.connect(e);
    a.connect(f);
    f.connect(d);
    System.out.println(a.canReach(d, 2));

}

public static void main(String[] args) {
    new Graph();
}

输出:

false
true

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 2020-08-25
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多