我想做的:
使用在文本文件中找到的图形,找到并打印从顶点a到顶点b的最短路径(顶点数量最少)
当前实现:
public String findPath(int v, int w) {
Queue<Integer> q = new LinkedList<Integer>();
boolean[] visited = new boolean[g.numVertices()];
String[] pathTo = new String[g.numVertices()];
q.add(v);
pathTo[v] = v+" ";
while(q.peek() != null) {
if(runBFS(q.poll(),w,visited,q,pathTo))
break;
}
return pathTo[w];
}
private boolean runBFS(int v, int w, boolean[] visited, Queue<Integer> q, String[] pathTo) {
if(visited[v]) {
}
else if(v == w)
return true;
}
else {
visited[v] = true;
VertexIterator vi = g.adjacentVertices(v);
while(vi.hasNext()) {
int nextVertex = vi.next();
pathTo[nextVertex] = pathTo[v] + nextVertex + " ";
q.add(nextVertex);
}
}
return false;
}
v =原点
w =目标顶点
g = graph
vi =一个普通迭代器,迭代v
的相邻节点现在,它正在使用String[]来跟踪路径,但我建议有一个解决方案可以使用Queue<ArrayList<Integer>>
而不是String[]
,通过与q队列并行运行此队列来保存路径。
谁能指点我一下?
您可以使用第二个队列Queue<ArrayList<Integer>> q2
以相同的顺序存储从v
到当前q
中的每个节点的最短路径(作为ArrayList<Integer>
)。每当轮询q
时,也轮询q2
,每当向q
添加节点时,通过将最短路径复制到前一个节点并附加当前节点来计算到该节点的最短路径,并将其添加到q2
。