我知道标题有点乱,但我不知道如何更好地解释它。
我正在尝试做的事情:
使用在文本文件中找到的图,找到并打印从顶点 A 到顶点 B 的最短路径(最少顶点数)。
注意:使用广度优先搜索,而不是 Dijkstra 的。
我有什么:
一种在图上应用 BFS 的工作算法,但没有实际打印出最短路径的好方法。
我很难将最短路径中的顶点与仅通过算法运行但不在最短路径中的顶点区分开来。
例如:找到0和4之间的最短路径。0连接到1,2和3。1连接到4。我的路径结果是[0,1,2,3,4]而不是[0,1, 4]。
我还没有找到任何提出相同问题的线程,或者任何包含此问题的 BFS 演练,所以我不确定我是否让这变得比现在更难?
编辑:那些可能感兴趣的人的代码(完全不确定我是否要避免圈子?)
编辑 2:更改了将路径存储到堆栈的方式。
public String findPath(int v, int w) {
Queue<Integer> q = new LinkedList<Integer>();
boolean[] visited = new boolean[g.numVertices()];
q.add(v);
Stack<Integer> path = new Stack<Integer>();
while(q.peek() != null) {
runBFS(q.poll(),w,visited,q,path);
}
return path.toString();
}
private void runBFS(int v, int w, boolean[] visited, Queue<Integer> q, Stack<Integer> path) {
if(visited[v]) {
}
else if(v == w) {
path.add(v);
q.clear();
}
else {
path.add(v);
visited[v] = true;
VertexIterator vi = g.adjacentVertices(v);
while(vi.hasNext()) {
q.add(vi.next());
}
}
}
变量和方法的一些解释:
v = 原点
w = 目标顶点
g = 图表
vi = 迭代 v 的邻居的普通迭代器
谢谢阅读!