ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法16 啊哈算法 广度优先搜索( Breadth First Search, BFS) 迷宫问题 JAVA

2021-11-10 23:00:54  阅读:175  来源: 互联网

标签:Breadth JAVA int 迷宫 50 算法 ax ay new


广度优先:每一步都列出所有可能

题目

迷宫由n 行m 列的单元格组成( n 和m 都=<50 ) ,每个单元格要么是空地, 要么
是障碍物。你的任务是帮助小哼找到一条从迷宫的起点通往小哈所在位置的最短路径。注意
障碍物是不能走的,当然小哼也不能走到迷宫之外。

代码

添加了个打印路线的功能
输出如图

简化为矩阵,障碍为1,终点为2.


//图形矩阵,障碍物,终点最短步数
/*
00000
00110
01200
00000
 */

class Main{
    public static void main(String[] args) {
        int x,y,m_s=99;
//队列 x,y,step
        int[] ax=new int[50];
        int[] ay=new int[50];//ay=ax;//que
        int[] as=new int[50];
//set map
        int[][] map=new int[][]{{0,0,0,0,0},{0,0,1,1,0},{0,1,2,0,0},{0,0,0,0,0}};
//walked places
        int [][] road=new int[4][5];
//4ways-move
        int [][] walk=new int[][]{{0,1},{0,-1},{1,0},{-1,0}};//4ways-move
//pointers
        int tail=1,head=0;
        
        for (;head<tail;) {//one point 4 ways
            for (int i = 0; i < 4; i++) {//head->tail
                x = ax[head] + walk[i][0];
                y = ay[head] + walk[i][1];
                //越界
                if (x > 3 || y > 4||x<0||y<0) {
                    continue;
                }
//check destination  
                if (map[x][y] == 2&&as[tail-1]<m_s) {
                    m_s=as[tail-1];
                    //origin
                    plot(map,road);
                    System.out.println(as[tail-1]);
                    break;
                }
                if (road[x][y] == 1) {//走过
                    continue;
                }

                if ((x == 1 && (y == 2 || y == 3)) || (x == 2 && y == 1)) {//障碍
                    continue;
                }
                ax[tail] = x;
                ay[tail] = y;
                as[tail]=as[head]+1;//!!!!!!!!!!!!!!!

                tail++;
                road[x][y] = 1;
            }
            head++;
        }    }
//添加了个打印路线的功能
    void plot(int map[][],int road[][]){
        for (int ix=0;ix<4;ix++){
            for (int j=0;j<5;j++){
                System.out.print(map[ix][j]);

            }
            System.out.println();
        }
        System.out.println();
        //road
        for (int ix=0;ix<4;ix++){
            for (int j=0;j<5;j++){
                System.out.print(road[ix][j]);
            }
            System.out.println();
        }
    }


}

标签:Breadth,JAVA,int,迷宫,50,算法,ax,ay,new
来源: https://www.cnblogs.com/impw/p/15536261.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有