简单图中的递归回溯
Posted
技术标签:
【中文标题】简单图中的递归回溯【英文标题】: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;
我有一个邻接矩阵与二维布尔数组关系中的关系,基于图。
提前致谢
【问题讨论】:
到目前为止你写了什么,有什么不足的地方? 您尝试过的代码在哪里? 我更新了我的问题。 【参考方案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
【讨论】:
以上是关于简单图中的递归回溯的主要内容,如果未能解决你的问题,请参考以下文章