6264:走出迷宫

简介: 题目链接:http://noi.openjudge.cn/ch0205/6264/总时间限制: 1000ms 内存限制: 65536kB描述当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。

题目链接: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 }

 

相关文章
|
7月前
|
存储
每日一题——地下迷宫(迷宫问题II)
每日一题——地下迷宫(迷宫问题II)
|
7月前
|
算法 C语言
每日一题——迷宫问题(I)
每日一题——迷宫问题(I)
|
7月前
|
机器学习/深度学习 存储
leetcode-1036:逃离大迷宫
leetcode-1036:逃离大迷宫
36 0
|
定位技术
1254:走出迷宫 2021-01-09
1254:走出迷宫 2021-01-09
|
算法 数据可视化 机器人
用遗传算法寻找迷宫出路
遗传算法是一种基于达尔文进化论的搜索启发式算法。该算法模拟了基于种群中最适合个体的自然选择。
414 0
用遗传算法寻找迷宫出路
|
定位技术
国庆七天乐,要猛! ——经典迷宫问题
国庆七天乐,要猛! ——经典迷宫问题
89 0
|
算法
贪心算法——小船过河
贪心算法——小船过河
400 0
贪心算法——小船过河
|
机器学习/深度学习 C++
【力扣·每日一题】1036. 逃离大迷宫 (C++ bfs 思维)
【力扣·每日一题】1036. 逃离大迷宫 (C++ bfs 思维)
98 0
【力扣·每日一题】1036. 逃离大迷宫 (C++ bfs 思维)
蓝桥杯2017年第八届第二题:纸牌三角形
蓝桥杯是指蓝桥杯全国软件和信息技术专业人才大赛。是由工业和信息化部人才交流中心举办的全国性IT学科赛事。共有北京大学、清华大学、上海交通大学等全国1200余所高校参赛。
95 0
蓝桥杯2017年第八届第二题:纸牌三角形
LeetCode每日一题——1823.找出游戏的获胜者(约瑟夫环问题)
共有 n 名小伙伴一起做游戏。小伙伴们围成一圈,按 顺时针顺序 从 1 到 n 编号。确切地说,从第 i 名小伙伴顺时针移动一位会到达第 (i+1) 名小伙伴的位置,其中 1 <= i < n ,从第 n 名小伙伴顺时针移动一位会回到第 1 名小伙伴的位置。
163 0
LeetCode每日一题——1823.找出游戏的获胜者(约瑟夫环问题)