场景: 我有一个地图,巫婆节点连接在一起。
function areNodesConnected(node1, node2) return true/false;
请求: 我正在寻找使用此功能的算法(伪代码)来查找2个随机节点之间的路径。
结果应该是从节点1开始的节点1和节点2在阵列的末尾对节点进行排序的数组。如果2个节点之间没有路径,则返回null。
注意:
谢谢您的建议。 我并没有要求完整的解决方案,而是要求从哪里开始解决这个问题。
答案 0 :(得分:1)
我们可以使用DFS(深度优先搜索)来找到答案。
让我们维护一个堆栈和一个访问数组,以跟踪先前访问的节点。我们还需要跟踪父节点的每个节点,以获得最终答案。如上所述,使用功能areNodesConnected(node1,node2)检查边缘。
步骤
伪代码
function findPath(int start, int end, int nodes):
stack = Stack
parent = array of integers to keep track of parents, set every value to -1 to start with
vis = visited array of booleans to keep track of previous nodes
stack.push(start)
parent[start] = start // setting the starts parent to itself so we know when to stop searching.
while stack is not empty:
int x = stack.pop()
for y in range 0 to nodes:
if areNodesConnected(x, y) and not vis[y]: // checking if there is an edge from x to y
stack.push(y)
parent[y] = x; // store the parent of y
vis[x] = true
// now we have to print our final answer
if parent[i] == -1:
return null // there is no path
list = List for final answer
for (int i = end; parent[i] != i; i = parent[i]): // recursively set i to it's parent until it is the starting node.
list.add(i)
// now lets add start
list.add(start)
return list
上述解决方案的唯一问题是列表与您想要的相反。