无权图的最短路径
思路:无权图的最短路径也就是要求两点之间最少几跳可达,那么我们可以这样,用广度遍历,从起点开始一层层遍历,如果第一次遍历到终点,那么肯定是最短路径。
public static void findPath(int start,int end) { //创建一个队列来存储 LinkedList< VNode> queue=new LinkedList<VNode>(); queue.offer(nodes[start]); while(!queue.isEmpty()) { VNode vnode=queue.peek(); isVisit[vnode.index]=true; BNode bnode=vnode.bnode; //如果结束点已经访问 跳出循环 if(isVisit[end]) break; //如果他的邻节点都访问或者没有邻节点 跳出循环 while(bnode!=null) { //如果邻节点还没被访问访记录他的上一节点,否则不进行记录。这样的话即使到了下一跳有这个顶点,记录的也是更的短路径,比如说起点A 邻节点有BCD B的邻节点是C,此时遍历A的邻节点C的时候,就记录C的上一节点是A,下次遍历B的领节点,因为C已经被访问,所以C记录的上一节点还是A,这样就保证了最短路径。 if(!isVisit[bnode.index]) {&nb