当前位置: 首页 > news >正文

广度优先(BFS)(例子:迷宫)

       广度优先搜索算法(BFS)是一种用于图形和树数据结构的搜索算法。该算法从根节点开始搜索,然后依次访问每个相邻节点。在搜索过程中,每个节点都标记为已访问,以避免重复访问。BFS算法适用于寻找最短路径的问题,因为它保证找到的解是距离根节点最近的解。

       BFS算法的基本思想是使用队列保存已经访问的节点。首先将根节点入队,然后从队列中取出一个节点进行访问,并将与该节点相邻的未访问节点入队。重复这个过程,直到队列为空为止。BFS算法的时间复杂度为O(V+E),其中V为节点数,E为边数。

#include<iostream>//广度搜索,迷宫例题
using namespace std;
typedef struct node
{int x;int y;int f;int s;
};
int main()
{node que[2501];int a[51][51] = { 0 };//储存地图int book[51][51] = { 0 };//标记是否走过int next[4][2] = { {0,1},{1,0},{0,-1},{-1,0} };//右,下,左,上int head, tail;int x, y, q, p,n,m,tx,ty;cout << "输入地图规模:" << endl;cin >> n >> m;//输入地图规模for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> a[i][j];cout << "输入起点、终点:" << endl;cin >> x >> y >> q >> p;//输入起点,终点head = 1, tail = 1;que[tail].x = x;que[tail].y = y;que[tail].f = 0;que[tail].s = 0;tail++;book[x][y] = 1;int flag = 0;//标记是否到达终点while (head < tail){for (int k = 0; k < 4; k++){tx = que[head].x + next[k][0];ty = que[head].y + next[k][1];if (tx<1 || tx>n || ty < 1 || ty>n)continue;if (a[tx][ty] == 0 && book[tx][ty] == 0)//没有障碍物且没走过{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 == q && ty == p){flag = 1;break;}}if (flag == 1)break;head++;}cout << que[tail - 1].s;
}

http://www.lryc.cn/news/187163.html

相关文章:

  • 【安卓源码】安卓Watchdog 机制
  • inscode连接不上gpu,持续8小时,为了数据不丢失续费了6小时,我只想知道什么时候可以连接
  • QT位置相关函数
  • vulnhub靶场 Kioptrix-level-1
  • 全网最细,真实企业性能测试落地实施,一文带你快速打通...
  • 三十一、【进阶】B+树的演变过程
  • 算法通过村第十三关-术数|白银笔记|术数高频问题
  • Java 线程的生命周期
  • Vue页面监听键盘按键的多种方法
  • 解析硬件连通性测试的重要性及测试方法
  • Hive窗口函数回顾
  • flink自定义窗口分配器
  • iOS CGRect CGPoint NSRange等结构体的NSLog打印输出
  • Viper FTP Mac/ftp管理工具
  • web漏洞-xml外部实体注入(XXE)
  • Impeller-Flutter的新渲染引擎
  • python 面试算法题
  • Python中的yield关键字
  • 怎么压缩pdf文件?分享缩小pdf文件的简单方法
  • 51单片机可调幅度频率波形信号发生器( proteus仿真+程序+原理图+报告+讲解视频)
  • Vuex的介绍
  • mysql基础语法速成版
  • Docker镜像 配置ssh
  • 12.2 实现键盘模拟按键
  • 《DevOps 精要:业务视角》- 读书笔记(七)
  • 【随想】每日两题Day.12(实则一题)
  • 基于复旦微JFM7K325T FPGA的高性能PCIe总线数据预处理载板(100%国产化)
  • 什么是原型链(prototype chain)?如何实现继承?
  • RabbitMQ 5种工作模式介绍和Springboot具体实现
  • C++ - 可变模版参数 - emplace相关接口函数 - 移动构造函数 和 移动赋值运算符重载 的 默认成员函数