6264:走出迷宫
题目链接:http://noi.openjudge.cn/ch0205/6264/
- 总时间限制: 1000ms 内存限制: 65536kB
- 描述
-
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。 - 输入
- 第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。 - 输出
- 输出从起点到出口最少需要走的步数。
- 样例输入
-
3 3 S#T .#. ...
- 样例输出
-
6
算法分析:典型的广搜。
1 #include<stdio.h> 2 #include<iostream> 3 #include<queue> 4 using namespace std; 5 6 struct obj 7 { 8 int xx,yy,step; 9 }; 10 11 int n,m; 12 char map[102][102]; 13 queue<struct obj> q; 14 struct obj S,T; 15 16 int dx[4]={-1,0,1,0};//上右下左 17 int dy[4]={0,1,0,-1}; 18 void BFS(); 19 20 int main(int argc, char *argv[]) 21 { 22 int i,j; 23 scanf("%d%d",&n,&m);getchar(); 24 for(i=0;i<n;i++) 25 { 26 for(j=0;j<m;j++) 27 { 28 map[i][j]=getchar(); 29 if(map[i][j]=='S') 30 { S.xx=i; S.yy=j; S.step=0; } 31 else if(map[i][j]=='T') 32 { T.xx=i; T.yy=j; T.step=-1; map[i][j]='.'; } 33 } 34 getchar(); 35 } 36 37 if(S.xx==T.xx&&S.yy==T.yy) printf("0\n"); 38 else BFS(); 39 printf("%d\n",T.step); 40 41 return 0; 42 } 43 44 void BFS() 45 { 46 int i,txx,tyy; 47 struct obj temp; 48 49 q.push(S); 50 while(!q.empty()) 51 { 52 for(i=0;i<4;i++) 53 { 54 txx=q.front().xx+dx[i]; 55 tyy=q.front().yy+dy[i]; 56 if(txx>=0&&txx<n&&tyy>=0&&tyy<m&&map[txx][tyy]=='.') 57 { 58 temp.xx=txx; 59 temp.yy=tyy; 60 temp.step=q.front().step+1; 61 map[txx][tyy]='#'; 62 q.push(temp); 63 if(temp.xx==T.xx&&temp.yy==T.yy) 64 { 65 T.step=temp.step; 66 return ; 67 } 68 } 69 } 70 q.pop(); 71 } 72 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App