1256:献给阿尔吉侬的花束 2021-01-09

简介: 1256:献给阿尔吉侬的花束 2021-01-09

1256:献给阿尔吉侬的花束

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。

迷宫用一个R×C的字符矩阵来表示。字符S表示阿尔吉侬所在的位置,字符E表示奶酪所在的位置,字符#表示墙壁,字符.表示可以通行。阿尔吉侬在1个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。

【输入】

第一行是一个正整数T(1 ≤ T ≤ 10),表示一共有T组数据。

每一组数据的第一行包含了两个用空格分开的正整数R和C(2 ≤ R, C ≤ 200),表示地图是一个R×C的矩阵。

接下来的R行描述了地图的具体内容,每一行包含了C个字符。字符含义如题目描述中所述。保证有且仅有一个S和E。

【输出】

对于每一组数据,输出阿尔吉侬吃到奶酪的最少单位时间。若阿尔吉侬无法吃到奶酪,则输出“oop!”(只输出引号里面的内容,不输出引号)。每组数据的输出结果占一行。

【输入样例】

3

3 4

.S..

###.

..E.

3 4

.S..

.E..

....

3 4

.S..

####

..E.

【输出样例】

5

1. #include <iostream>
2. #include <cstdio>
3. #include <cstring>
4. #include <algorithm>
5. using namespace std;
6. int map[202][202],p[200000][4];
7. int xx[4]={-1,1,0,0};
8. int yy[4]={0,0,-1,1};
9. int t,r,c,x1,y1;
10. char ch;
11. void bfs(){
12.   int x,y,t=0,w=1;
13.   while(w>t){
14.     t++;
15.     for(int i=0;i<4;i++){
16.       x=p[t][1]+xx[i];
17.       y=p[t][2]+yy[i];
18.       if(x>0&&x<=r&&y>0&&y<=c&&map[x][y]==0){
19.         w++;p[w][1]=x;p[w][2]=y;
20.         p[w][3]=p[t][3]+1;map[x][y]=1;
21.         if(x==x1&&y==y1){
22.           printf("%d\n",p[w][3]);return;
23.         }
24.       } 
25.     }
26.   }
27.   printf("oop!\n");
28. }
29. int main(int argc, char *argv[])
30. {
31.   scanf("%d",&t);
32.   for(int k=1;k<=t;k++){
33.     scanf("%d %d",&r,&c);
34.     memset(map,0,sizeof(map));
35.     memset(p,0,sizeof(p));
36.     for(int i=1;i<=r;i++)
37.       for(int j=1;j<=c;j++){
38.         cin>>ch;
39.         if(ch=='S'){
40.           map[i][j]=1;p[1][1]=i,p[1][2]=j,p[1][3]=0;
41.         }
42.         else if(ch=='E'){x1=i;y1=j;}
43.         else if(ch=='#')map[i][j]=1;
44.     }
45.     bfs();
46.   }
47.   return 0;
48. }


相关文章
|
Java 大数据 Linux
【回望2022,走向2023】一个双非二本非科班的学生的旅途
【回望2022,走向2023】一个双非二本非科班的学生的旅途
139 0
【回望2022,走向2023】一个双非二本非科班的学生的旅途
|
6月前
|
机器学习/深度学习 存储 算法
献给阿尔吉侬的花束
献给阿尔吉侬的花束
68 0
|
设计模式 前端开发 JavaScript
回首2022,烟火如常,布衣剩饭,啥也没干,年终总结,蹈海难酬
开篇明义,2022年,我啥也没干,或者说的更准确一些,啥也没干成,没有什么值得拿出来凡尔赛一下的事情,或者可以满足一下虚荣心的成就,300多个日夜里,就是日复一日的起床、上班、讲课、下班、吃饭、睡觉。有什么可总结的呢?
回首2022,烟火如常,布衣剩饭,啥也没干,年终总结,蹈海难酬
|
前端开发 搜索推荐 定位技术
我的开发感悟——热爱可奔赴山海,抵岁月漫长
我的开发感悟——热爱可奔赴山海,抵岁月漫长
110 0
我的开发感悟——热爱可奔赴山海,抵岁月漫长
|
API 定位技术 C++
【致敬童年】Funcode实现坦克大战
【致敬童年】Funcode实现坦克大战
|
数据采集 前端开发 BI
任时光匆匆流去 | 2019 年终总结
2019 是正式参加工作的第二年,时间消失起来就像火药引线被点燃一般让人来不及反应。看到一句很有认同感的话:“写作是和自己对话,对话越多,内心就会越平和越坚定。”去年的写作荒废了不少,就趁年终总结,多想一点,多说一点。
161 0
一碗鸡汤
一、要成为自己的专家 1、找到自己的独特性——《发现自己的优势2.0》 2、弄清楚让我们做出决定的根本原因(是为了亲人、朋友还是为了成就感) 3、经验(定期反省自己什么做对了,什么做错了,有没有更对的经验可循)   人做不成事有两个原因:第一,他对自己说他不行;第二,别人说他不行。
906 0
钢哥的MBA备考心得 - 献给同样努力的你
MBA备考漫漫征途,只为追求更好的自己。以下是我自己纯手工整理的MBA备考思维导图,钢哥用它们顺利考入了复旦,希望对其他同学也能有所帮助。
2006 0