当前位置:网站首页>走出迷宫的最少步数2
走出迷宫的最少步数2
2022-08-09 23:46:00 【-JMY-】
题目描述
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。
输入
第一行是两个整数n和m(1<=nm<=100),表示迷宫的行数和列数。接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点'T'表示出口。
输出
输出从起点到出口最少需要走的步数。
样例输入
3 3 S#T .#. ...
样例输出
6
参考代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
int q[5000][2],hh,tt,kx,ky,l,gx,gy;
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int d[50][50];
char a[50][50];
void bfs(){
while(hh!=tt){
kx=q[hh][1];
ky=q[hh][0];
hh++;
for(int i=0;i<4;i++){
int xx=kx+dx[i];
int yy=ky+dy[i];
if(xx>=0&&xx<m&&yy>=0&&yy<n&&a[yy][xx]!='#'&&d[yy][xx]==0){
tt++;
q[tt-1][0]=yy;
q[tt-1][1]=xx;
d[yy][xx]=d[ky][kx]+1;
}
}
}
return;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
if(a[i][j]=='S'){
q[0][0]=i;
q[0][1]=j;
d[i][j]=1;
}
if(a[i][j]=='T'){
gx=j;
gy=i;
}
}
tt++;
bfs();
cout<<d[gy][gx]-1;
return 0;
}
边栏推荐
猜你喜欢

Golden Warehouse Database KingbaseGIS User Manual (6.5. Geometry Object Editing Function)

CAS:183896-00-6 (Biotin-PEG3-C3-NH2) PEG衍生物

arm-4-裸板开发

vmware Exsi 网卡配置

博弈小游戏

【毕业设计】 基于Stm32的家庭智能监控系统 - 单片机 图像识别 人体检测 AI

3.4 - 编译与解释 3.5 - 编译过程 3.8 - 文法

RebatMq消息中间件(一) 各个中间件介绍

MATLB|和她跌宕起伏最终到达人生之峰【浪漫旅途】

源码编译安装LAMP和LNMP
随机推荐
Kubernetes 开发环境比对
Eureka protects itself
NTP SERVICE TASK 在GWserver配置、启用NTP服务,为当前环境提供时钟同步服务,Client主机可以从该服务器同步时间。
Leetcode82. 删除排序链表中的重复元素 II
漫谈缺陷管理的自动化实践方案
Leetcode79. 单词搜索
JVM Memory and Garbage Collection - 10. Direct Memory
《MySQL入门很轻松》第4章:数据表中存放的数据类型
Digital wallets, red sea ecological rapid introduction of small programs can help capture device entry wisdom
C语言--数据的存储(上)
2022金九银十工作潮,怎么样才能成功跳槽面试拿到高薪呢?
c语言文件基本操作总结
博弈小游戏
dlopen failed: library “libtaml.so“ not found
断开和服务器共享连接的方法「建议收藏」
Creo5.0入门教程赠素材
RebatMq消息中间件(一) 各个中间件介绍
Golden Warehouse Database KingbaseGIS User Manual (6.5. Geometry Object Editing Function)
数据库的备份与恢复「建议收藏」
【数据存储】signed,unsigned到底怎么区分?如何计算?