题目描述(31)
X 星球的一处迷宫游乐场建在某个小山坡上。它是由 10×10 相互连通的小房间组成的。
房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:
- L 表示走到左边的房间,
- R 表示走到右边的房间,
- U 表示走到上坡方向的房间,
- D 表示走到下坡方向的房间。
X 星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把 100 名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。
迷宫地图如下:
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
请你计算一下,最后,有多少玩家会走出迷宫,而不是在里边兜圈子?
如果你还没明白游戏规则,可以参看下面一个简化的 4x4 迷宫的解说图:
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
思路
假如某点可以走出迷宫,则该点走出迷宫的步数一定小于100。因此,我们依次遍历每个点,判断走100步之后的是否在界限内,如果在,则走不出迷宫;如果不在则走出迷宫。
代码
#include<stdio.h>
int main(){
char a[10][11]={"UDDLUULRUL",
"UURLLLRRRU",
"RRUURLDLRD",
"RUDDDDUUUU",
"URUDLLRRUU",
"DURLRLDLRL",
"ULLURLLRDU",
"RDLULLRDDD",
"UUDDUDUDLL",
"ULRDLUURRR"};
int k=0;
int m,n;
int sum=0;
for(int i=0; i<10; i++){
for(int j=0; j<10; j++){
m = i;
n = j;
while(k < 100){
if(a[m][n] == 'U') m--;
else if(a[m][n] == 'D') m++;
else if(a[m][n] == 'L') n--;
else if(a[m][n] == 'R') n++;
if(m<0 || m>9 || n<0 || n>9){
sum++;
break;
}
k++;
}
k = 0;
}
}
printf("%d",sum);
return 0;
}