迷宫的最短路径
时间:2022-07-24
本文章向大家介绍迷宫的最短路径,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:给定一个大小为N * M的迷宫,迷宫由通道与墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需要的最下步数。
思路:很明显是BFS问题,我们从起点出发,然后把步数为1的点全部遍历,然后是扩展到步数为2的全部的点,然后是步数为3的…直到出现了终点,此时我们所求的步数即为最短路。
#include<bits/stdc++.h>
#define maxn 100004
#define inf 0x3f3f3f3f
using namespace std;
typedef pair<int,int> p;
int sx,sy;
int gs,gy;
char a[maxn][maxn];
int dis[maxn][maxn];
int dx={1,0,-1,0};
int dy={0,1,0,-1};
int bfs(){
queue<p> que;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
dis[i][j] = inf;
}
}
que.push(p(sx,sy));
d[sx][sy] = 0;
while(que.size()){
p = que.front();que.pop();
if(p.first == gx && p.second == gy) break;
for(int i=0;i<4;i++){
int nx = p.first + dx[i],ny = p.second + dy[i];
if(nx>=1 && nx<=n && ny>=1 && ny<=m && a[nx][ny]!='#' && dis[nx][ny]==inf){
que.push(p(nx,ny));
dis[nx][ny] = dis[p.first][p.second] + 1;
}
}
}
return dis[gx][gy];
}
void solve(){
int res = bfs();
cout<<res<<endl;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j] == 'S'){
sx = i;
sy = j;
}
if(a[i][j] == 'G'){
gs = i;
gy = j;
}
}
}
solve();
return 0;
}
- 扒一扒rvest的前世今生!
- RCurl中这么多get函数,是不是一直傻傻分不清!!!
- 机器学习(二)深度学习实战-使用Kera预测人物年龄问题描述引入所需要模块加载数据集创建模型编译模型优化optimize1 使用卷积神经网络optimize2 增加神经网络的层数输出结果结果
- 异步加载的基本逻辑与浏览器抓包一般流程
- 左手用R右手Python系列之——表格数据抓取之道
- XML/HTML/JSON——数据抓取过程中不得不知的几个概念
- R语言网络数据抓取的又一个难题,终于攻破了!
- R语言数据清洗实战——高效list解析方案
- 左手用R右手Python系列——循环中的错误异常规避
- SpringBoot2.x开发案例之整合Quartz任务管理系统
- 给出一组非负整数,重新排序组成最大的数
- [机智的机器在学习] TensorFlow实现Kmeans聚类
- [机智的机器在学习] 利用TensorFlow实现多元线性回归分类器
- [数据结构和算法]《算法导论》动态规划笔记(1)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法