介绍
这篇文章给大家分享的是有关怎么样使用java算法BFS来求迷宫出口最短路径的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
队列的建立
静态队列r=新LinkedList ();//创建队列
队列的基本方法
r.offer ();入队尾
r.poll ();出队首
r.peek ();队首的内容
代码实现:
全局变量设置
包两个; 进口java.util.LinkedList; 进口java.util.Queue; 进口java.util.Scanner; 公开课BFS { 静态int [] []=new int [100] [100];//输入迷宫 静态v int [] []=new int [100] [100];//走过的标记为1 静态int startx starty;//输入起点位置 静态整数p, q;//输入要到达的坐标位置 静态int dx []={0 1 0 1};//方向数组 静态int dy []={1, 0, 1, 0}; 静态Queuer=新LinkedList ();//创建队列 {//静态类点建立类坐标属性 int x; int y; int步骤; }
输入迷宫和起始位置,目标位置
公共静态void main (String [] args) { 扫描仪在=新扫描仪(系统); int m=in.nextInt (); 在.nextInt int n=(); for (int i=1; i<=m;我+ +)//输入迷宫 for (int j=1; j<=n; j + +) [我][j]=in.nextInt (); startx=in.nextInt (); starty=in.nextInt ();//输入目标和起始位置 p=in.nextInt (); q=in.nextInt ();
BFS算法开始
1,设置队首
//石 点开始=new点();//定义一个初始类作为队首 开始。x=startx; 开始。y=starty; 开始。一步=0; r.offer(开始); v [startx] [starty]=1;
2,进入循环体
,(! r.isEmpty()){//当队列为空时跳出循环 int x=r.peek()方式;//把队首的属性赋值 int y=r.peek () .y; .step int一步=r.peek (); if (x==p和,y==q){//到达目的地,退出循环 System.out.println(步骤); 打破; } for (int i=0; i<4,我+ +){//广度遍历,右下左上分别入队 int tx=x + dx[我]; int泰=y + dy(我); 如果((tx) (ty)==1,,v (tx) (ty)==0){//判断是否可以入队//入队 点temp=new点();//建立一个临时类 temp.x=tx; temp.y=泰; temp.step=r.peek ()。步+ 1; r.offer(临时);//入队 v (tx) (ty)=1;//标记为1 } } r.poll ();//拓展完了需要队首出队 } } }
感谢各位的阅读!关于怎么样使用java算法BFS来求迷宫出口最短路径就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!