【发布时间】:2015-12-12 23:03:40
【问题描述】:
我正在编写一个程序来处理具有未加权边的无向图,由于我是一名学习者,所以我遇到了一些问题。
我必须创建一个接收图形、初始顶点和结束顶点的方法(与主方法在同一类中)。然后我必须找出是否有从 vertex1 到 vertex2 的路径,并将中间顶点存储在队列中然后打印它(它不一定是最短的,如果可能但最好不要真的需要它)。
假设我有:
我想从
获得唯一的路径我已经实现了一个 bfs 方法,如下所示,用于我也有的其他方法,但我不知道如何从我需要的这个方法开始。 我的 bfs 方法:
public static Queue<DecoratedInmate> bfs (Graph gr, Vertex<DecoratedInmate> v){
Queue<Vertex<DecoratedInmate>> vertices = new LinkedList<Vertex<DecoratedInmate>>(); //temporal queue
Queue<DecoratedInmate> traversal = new LinkedList<DecoratedInmate>(); //traversal queue
Vertex<DecoratedInmate> u; //vertex taken from queue
Vertex<DecoratedInmate> z; //opposite vertex of u
Edge e; //edge between vertices
Iterator<Edge<DecoratedInmate>> it; //to store incident edges
v.getElement().setVisited(true); //set received vertex to visited
vertices.offer(v); //add origin vertex to queue
while (!vertices.isEmpty()) { //if queue isn't empty
u = vertices.remove(); //take vertex from queue
traversal.offer(u.getElement()); //add element to list
it = gr.incidentEdges(u); //get incident edges of u
while (it.hasNext()) { //check if there are incident edges
e = it.next(); //assign the edge
z = gr.opposite(u, e); //assign opposite vertex of u
if (!z.getElement().getVisited()) { //check if the opposite is not visited
z.getElement().setVisited(true); //set to visited
vertices.offer(z); //add to queue
}
}
}
return traversal;
}
提前致谢
【问题讨论】: