#include<iostream>
using namespace std;
struct note
{int x;int y;int f;int s;
};
int main()
{struct note que[2501];int a[51][51]={0},book[51][51]={0};//定义一个用于表示走的方向的数组int next[4][2]={  {0,1},//向右走{1,0},//向下走{0,-1},//向左走{-1,0}//向上走};int head,tail;int i,j,k,n,m,startx,starty,p,q,tx,ty,flag;cin>>n>>m;for(i=1;i<=n;i++)for(j=1;j<=m;j++)cin>>a[i][j];cin>>startx>>starty>>p>>q;//队列的初始化head=1;tail=1;que[tail].x=startx;que[tail].y=starty;que[tail].f=0;que[tail].s=0;tail++;book[startx][starty]=1;flag=0;//用来标记是否到达目标点,0表示暂时还没有到达,1表示到达//当队列不为空的时候循环while(head<tail){//枚举4个方向for(k=0;k<=3;k++){//计算下一个点的坐标tx=que[head].x+next[k][0];ty=que[head].y+next[k][1];//判断是否越界if(tx<1 || tx>n || ty<1 ||ty>m)continue;//判断是否障碍物或者已经在路径中if(a[tx][ty]==0 && book[tx][ty]==0){//把这个点标记为已经走过//注意宽搜每个点只入队一次,和深搜不同,不需要将book数组还原book[tx][ty]=1;//插入新的点到队列中que[tail].x=tx;que[tail].y=ty;que[tail].f=head;//求路径que[tail].s=que[head].s+1;tail++;}//如果到目标点了,停止扩展,任务结束,退出循环if(tx==p && ty==q){//注意下面两句话的位置千万不要写颠倒了flag=1;break;}}if(flag==1)break;head++;//注意这地方千万不要忘记,当一个点扩展结束后,head++才能对后面的点进行扩展}//打印队列中末尾最后一个点(目标点)的步数//注意tail是指向队列队尾(即最后一位)的下一位置,所以这需要-1cout<<que[tail-1].s;return 0;
}

广度优先搜索(啊哈算法)相关推荐

  1. 用BFS(广度优先搜索queuelist)算法解决农夫过河问题

    用BFS(广度优先搜索queue&&list)算法解决农夫过河问题 一.问题需求分析 一个农夫带着一只狼.一只羊和一棵白菜,身处河的南岸.他要把这些东西全部运到北岸.问题是他面前只有一 ...

  2. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

  3. 图的广度优先搜索(BFS)和深度优先搜索(DFS)算法解析

    BFS和DFS算法解析 [算法入门] 2018/6/2 1.前言 和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次. 但是图的遍历相对树而言要更为复杂. ...

  4. 数据结构与算法(python):广度优先搜索(Breadth First Search,BFS)和深度优先算法(Depth First Search,DFS)

    参考自 MOOC数据结构与算法Python版 目录 一.广度优先搜索 1.1 BFS算法过程 1.2 广度优先搜索算法分析 二.深度优先搜索 2.1 骑士周游 2.1.1 问题定义 2.1.2 构建骑 ...

  5. 广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first search,BFS)

    广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first search,BFS) 1. 广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first searc ...

  6. 搜索技术【广度优先搜索】 - 嵌套广度优先搜索 【POJ No. 1475】 推箱子 Pushing Boxes

    搜索技术[广度优先搜索] - 嵌套广度优先搜索 [POJ No. 1475] 推箱子 Pushing Boxes 在广度优先搜索里面嵌套广度优先搜索的算法被称为嵌套广度优先搜索(或称双重广度优先搜索) ...

  7. 广度优先搜索递归C语言代码,C++实现广度优先搜索实例

    本文主要叙述了图的遍历算法中的广度优先搜索(Breadth-First-Search)算法,是非常经典的算法,可供C++程序员参考借鉴之用.具体如下: 首先,图的遍历是指从图中的某一个顶点出发,按照某 ...

  8. 广度优先搜索 BFS算法

    广度优先搜索算法(Breadth-First-Search,BFS),又称作宽度优先搜索.BFS算法是从根节点开始,沿着树的宽度遍历树的节点.如果所有节点均被访问,则算法中止. 算法思想 1.首先将根 ...

  9. 广度优先搜索_计算机入门必备算法——广度优先遍历搜索

    1.  序言 又很久没有学习了,上次学到哈希表又称散列表的相关知识,这次我们学习一种新的数据结构来建立网络模型.这种数据结构被称作图.首先,我们先应该先了解一下什么是图,其次学习第一种图的算法,这种图 ...

  10. 小白的算法初识课堂(part6)--广度优先搜索

    学习笔记 学习书目:<算法图解>- Aditya Bhargava 文章目录 图简介 图是啥 广度优先搜索 寻找最短路径 队列 实现图 实现算法 运行时间 图简介 今天是五一,假如我要从家 ...

最新文章

  1. flash模拟EEROM
  2. CentOS 安全配置
  3. shell习题第6题:监听80端口
  4. ASP.NET Core分布式项目实战(Consent Controller Get请求逻辑实现)--学习笔记
  5. python中打开文件时只允许写入的模式是_详解python中各种文件打开模式
  6. 前端的c语言面试题,前端工程师面试题汇总(选择题)
  7. linux的常用操作——基于ftp的windows10和腾讯云centos操作系统之间的文件上传和下载
  8. Macbook Pro 光驱坏 安装windows
  9. [Linux实用工具]Windows下同步Linux文件(Linux安装Samba和配置)
  10. FIR数字滤波器的FPGA实现
  11. Bootstrap 可视化编辑器summernote
  12. MessageDigest实现MD5加密算法
  13. html 怎么让整体居中,html中表格整体居中 详解html里面如何让表格居中
  14. 电脑关闭Fn键+F1,直接使用F1键
  15. 睡眠伤害计算机硬件吗,电脑高手告诉您,电脑不关机只睡眠到底伤不伤硬盘?...
  16. 学籍管理html,河南学籍管理系统
  17. 深入 JavaScript 中的默认参数!
  18. matlab生成sinc函数,【 MATLAB 】sinc 函数简介
  19. 060031班第一次班级聚会
  20. 如何学习一门计算机语言(续)

热门文章

  1. 网页无法正常显示Lato字体,绕路而行
  2. 3D数学基础----欧拉角
  3. IAR for ARM系列教程(一)_新建软件工程详细过程
  4. 【MySQL从入门到精通】:了解SQL语言
  5. getch函数的使用与说明
  6. 转换BIM IFC数据为CityGML
  7. Document Star证件照大师升级版 for Mac(支持ps2021)
  8. java 单例模式(饿汉模式和懒汉模式)
  9. BUUCTF WEB 第四页WP(持续更新)
  10. ANSYS安装和破解教程