package com.Test.Graph; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import java.util.Stack; public class MinPathBFS { private NewGraph graph; private NewGraph.Vertex startVertex; private NewGraph.Vertex endVertex; private String endPoint; public static void main(String[] args){ MinPathBFS minPathBFS=new MinPathBFS(); minPathBFS.findMinPath(); minPathBFS.printMinPath(); } public MinPathBFS(){ graph=new NewGraph(); } public void findMinPath(){ intitalPath(); Queue<NewGraph.Vertex> queue=new LinkedList<>(); NewGraph.Vertex nowVertex; NewGraph.Vertex firstVertex; queue.offer(startVertex); while(!queue.isEmpty()){ nowVertex=queue.poll(); firstVertex=nowVertex; nowVertex.isVisited=true; if (nowVertex.name.equals(endPoint)) { //检测取出vertex是否为最后一个vertex System.out.println("We find it!!!!! "); break; } while(nowVertex.nextVertex!=null){ //将取出的vertex的所有后续节点都放进queue中去 nowVertex=nowVertex.nextVertex; if (!graph.vertexList[nowVertex.index].isVisited){ queue.offer(graph.vertexList[nowVertex.index]); graph.vertexList[nowVertex.index].preVertex=firstVertex; //将Vertex放进queue时将其preVertex设置为fvertex } } } } public void printMinPath(){ Stack<NewGraph.Vertex> stack=new Stack<>(); stack.push(endVertex); System.out.println(endVertex.preVertex!=null); while(endVertex.preVertex!=null){ endVertex=endVertex.preVertex; stack.push(endVertex); } System.out.print(stack.pop().name); while(!stack.isEmpty()){ System.out.print(" -> "+stack.pop().name); } System.out.println(); } public void intitalPath(){ Scanner scanner=new Scanner(System.in); System.out.println("Please entet start point and end point: "); String startPoint=scanner.next(); endPoint=scanner.next(); startVertex=graph.getVertex(startPoint); endVertex=graph.getVertex(endPoint); if (!graph.hasVertex(startPoint)) System.out.println("this graph don't has the start point"); else if(!graph.hasVertex(endPoint)) System.out.println("this graph don't has the end point"); else System.out.println("success"); } }
BFS实现最小路径
最新推荐文章于 2022-08-09 13:09:13 发布