我正在用 Java 编写一个类来表示 Graph 数据结构。这特定于无向、未加权的图,其目的主要用于边缘测试(节点 A 直接或间接连接到节点 B)。
我需要帮助来实现indirectEdgeTest 方法。在下面的代码中,我只注释了这个方法并且我返回 false,所以代码将按原样编译。
我花了一些时间想出一个算法,但我似乎找不到比这更简单的东西了,我担心我让它变得比它需要的更复杂:
- 首先测试直接连接
- 如果从节点 a 到节点 b 不存在直接连接:
- 对于我连接到节点 a 的每条边:
- 创建一个不包含边 a -> i 的新图
- 测试节点 i 和 b 之间的间接连接的新图
- 对于我连接到节点 a 的每条边:
欢迎您回答伪代码或实际 Java 代码。这是我的代码:
class Graph {
// This is for an undirected, unweighted graph
// This implementation uses an adjacency matrix for speed in edge testing
private boolean[][] edge;
private int numberOfNodes;
public Graph(int numNodes) {
// The indices of the matrix will not be zero-based, for clarity,
// so the size of the array will be increased by 1.
edge = new boolean[numNodes + 1][numNodes + 1];
numberOfNodes = numNodes;
}
public void addEdge(int a, int b) {
if (a <= numberOfNodes && a >= 1) {
if (b <= numberOfNodes && b >= 1) {
edge[a][b] = true;
edge[b][a] = true;
}
}
}
public void removeEdge(int a, int b) {
if (a <= numberOfNodes && a >= 1) {
if (b <= numberOfNodes && b >= 1) {
edge[a][b] = false;
edge[b][a] = false;
}
}
}
public boolean directEdgeTest(int a, int b) {
// if node a and node b are directly connected, return true
boolean result = false;
if (a <= numberOfNodes && a >= 1) {
if (b <= numberOfNodes && b >= 1) {
if (edge[a][b] == true) {
result = true;
}
}
}
return result;
}
public boolean indirectEdgeTest(int a, int b) {
// if there exists a path from node a to node b, return true
// implement indirectEdgeTest algorithm here.
return false;
}
}