bfs解救小哈最短路径

有一天,小哈一个人去玩迷宫。但是方向感不好的小哈很快就迷路了。小哼得知后便去解救无助的小哈。此时的小哼已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈。那么,问题来了

  1. 原题解析:`/*
  • 迷宫由n行m列组成,每个单元格要么是空地要么是障碍物,任务是帮助他找到一条最短路径
  • 去解救她;
  • 与dfs不同,广度优先算法bfs的思想是建立一个队列数组,这个数组中存放三个值,分别为x,y,step;step就代表我们走的步数
  • 通过广度的搜索将搜索的点加入我们的数列中,当终点(p,q)加入时,我们就得到了最小的step
  • 输入数据
    *5 4
    *0 0 1 0
    *0 0 0 0
    *0 0 1 0
    *0 1 0 0
    *0 0 0 1
    *1 1 4 3
    *输出数据
    *7
    */

分析完代码:

解题思路:

mport java.util.*;
public class bfs解救小哈最短路径 {public static void main(String[] args){int[][] a = new int[51][51];//迷宫数组,构建数组请注意,大小为51哦int[][] book = new int[51][51];//做标记的数组int[][] next = {{0,1},{0,-1},{1,0},{-1,0}};//下一步数组Scanner sc = new Scanner(System.in);//输入n 和  mString[] s1 = sc.nextLine().split(" ");int n = Integer.parseInt(s1[0]);int m = Integer.parseInt(s1[1]);//输入迷宫for (int i = 1;i <= n;i++){String[] s2 = sc.nextLine().split(" ");for(int j =1;j<=m;j++){a[i][j] = Integer.parseInt(s2[j-1]);}}//输入起点和终点String[] s3 = sc.nextLine().split(" ");int startx = Integer.parseInt(s3[0]);int starty = Integer.parseInt(s3[1]);int p = Integer.parseInt(s3[2]);int q = Integer.parseInt(s3[3]);//建立队列,开始了,因为迷宫是50*50的,所以队列中最多扩展2501个点duiLie[] dl = new duiLie[2501];int head = 1;//队列也是需要初始化的,有head和tail就够了int tail = 1;//建立队列了以后,我们可以开始bfs算法了,先把起点放在队列中,然后通过这个点扩展dl[tail] = new duiLie(startx,starty,0);tail++;book[startx][starty] = 1;//在这里我们新建一个flag,来表示是否找到了(p,q)点,找到了就没必要扩展了,并且第一个找到的就是需要的点的最短路径int flag = 0;while(head < tail)//肯定要保证前面的指针一直小于右边的{//开始试探了for(int i=0;i<4;i++){int tx = dl[head].x + next[i][0];int ty = dl[head].y + next[i][1];if(tx < 1||tx > n || ty < 1 || ty > n)continue;if(a[tx][ty]==0 && book[tx][ty]==0){dl[tail] = new duiLie(tx, ty, dl[head].z+1);tail++;book[tx][ty] = 1;}//扩展了这个点之后if(tx==p&&ty==q){flag = 1;break;}}//当当前head所指的这个点将它可以扩展的点都扩展了之后,看看有没有flag=1;如果没有就需要扩展下一个点if(flag==1)break;//如果没有呢?那么就要扩展下一个点head++;//很重要,!!!!!!!!!!说三遍}//输出,因为我们扩展到(p,q)就停止了,所以最后一个点就是(p,q,minstep)了System.out.println(dl[tail-1].z);}
}
class duiLie
{int x;int y;int z;duiLie(int x,int y,int z){this.x = x;this.y = y;this.z = z;}
}

有问题和其他方法请联系博主.

蓝桥杯:解救小哈最短路径相关推荐

  1. 蓝桥杯省赛最短路径-模板

    1. Floyd package 最短路径;import java.util.Arrays;public class 省赛F_最短路径_Floyd {public static void main(S ...

  2. 蓝桥杯国赛知识点汇总

    蓝桥杯国赛备赛总结知识点,以老师给的为原型,添加自己理解,供大家参考,后期不定时更新. 基础 1.熟练掌握API1.8常用方法 2.大数(高精度)加减乘除 3.并查集 模板: public class ...

  3. 2021年12届蓝桥杯C++B组省赛

    2021年12届蓝桥杯C++B组省赛 路径 自己的写法 #include <cstring> #include <cstdio> #include <cmath> ...

  4. 蓝桥杯最短路(java过)spfa单源最短路算法

    spfa 百度百科上spfa的思路为:动态逼近法:设立一个先进先出的队列用来保存待优化的结点,优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向的结点v进行松弛操作,如果v点的最 ...

  5. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径

    2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径 Ideas 算法:最短路径 数据结构:图 思路:根据规则构图,单源最短路径Dijkstra算法. 首先构图其实很简单,就是按照 ...

  6. 45行代码AC_2017年第八届蓝桥杯C/C++ A组第二题(广搜模板+解题报告)

    问题描述 有9只盘子,排成1个圆圈. 其中8只盘子内装着8只蚱蜢,有一个是空盘. 我们把这些蚱蜢顺时针编号为 1~8   每只蚱蜢都可以跳到相邻的空盘中, 也可以再用点力,越过一个相邻的蚱蜢跳到空盘中 ...

  7. 蓝桥杯 第十届 JAVAB组 E迷宫

    /*试题 E: 迷宫 本题总分:15 分 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方. 010000 000100 001001 110000 ...

  8. 刷算法题需要的java语法_蓝桥杯java b组需要重点刷什么算法呢?

    我觉得这个问题我很适合回答.不过距离我最后一次参赛,已经有了三年,所以回答的内容重点可能有点偏(建议你,可以到网上找找最新的获奖选手赛后总结看看),但是我觉得应该对你有用. 我本科也在湖北,并且参加过 ...

  9. 解救小哈(dfs或bfs)

    题目描述: 有一天,小哈一个人去玩迷宫.但是方向感很不好的小哈很快就迷路了.小哼得知后便立即去解救无助的小哈.小哼当然是有备而来,已经弄清楚了迷宫的地图,现在小哼要以最快的速度去解救小哈.问题就此开始 ...

最新文章

  1. thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)
  2. 有关计算机存储器的几个名词的概念和辨析(内存,外存,RAM,ROM,磁盘等)
  3. dl 系列服务器,DL系列服务器内存总结..doc
  4. Eclipse中10个最有用的快捷键组合(转)
  5. Git之checkout到别的分支提示Your local changes to the following files would be overwritten by checkout:
  6. C89与C99标准比较
  7. dlib+vs2013+opencv实现人脸特征点检测
  8. 服务器主板点不亮排查
  9. 默认帐户生成器帐户来源
  10. 0108--/** * 根据最大尺寸和字体计算文字的实际尺寸 */
  11. Asp.net 中 IHttpHandlerFactory接口 对应web.config 中的节点
  12. 【牛客练习赛57:D】回文串(回文树求前/后缀最长回文子串)
  13. glide 设置宽高_glide如何设置图片大小
  14. 旷视科技 CVPR部分文章
  15. python 数据结构与算法分析 逻辑门半加器与全加器实现
  16. 长城会十周年:文厨用故事讲述它的“前世今生”
  17. 用Qt搭建图书管理系统(三)
  18. Python-opencv学习第二十九课:高斯双边模糊
  19. 【C语言】实现简单通讯录系统(源码)
  20. html测试题英语,北大PKU-GATE考试真题-题库

热门文章

  1. 区块链技术从入门到实践
  2. 室内定位中非视距的识别和抑制算法研究综述(部分)
  3. 常见亲脂性细胞膜染料DiO, Dil, DiR, Did光谱图和实验操作流程
  4. MacOS 校验iso sha256值、md5值,linux
  5. wgs84坐标格式转换度分秒_WGS84经纬度坐标转换到西安80高斯投影坐标。
  6. 【使用心得】ChatGPT做出行攻略
  7. php二维数组取交集,PHP中二维数组怎么取交集
  8. html5锚点平滑,使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置...
  9. pr_debug打印输出
  10. 什么是学习?如何学习?