1021: 机器人走迷宫
时间限制: 1 Sec 内存限制: 128 MB
提交: 339 解决: 71
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
有一个愚蠢的机器人走进一个w*h的迷宫,迷宫里有空地和陷阱。他想要访问迷宫的每个方格,但是它很笨,只会按照指令的方向走。当机器人不能走的时候,也就是下一步会遇到陷阱、迷宫边界或者访问过的格子,它会向右转90度(顺时针旋转90度,不能访问已经访问过的方格,且在原地只转一次,移动后可获得又一次旋转机会)。请问这个机器人最多可以经过多少个方格。
例如:
5 5
R****
*****
*****
*****
*****
机器人可以经过25个格子,但是
2 3
**L
***
机器人只能经过3个格子。
输入
对于每组数据,第一行两个数w和h,表示迷宫的行和列(1<=w,h<=10)
接下来w行每行有h个字符用于描述这个迷宫。迷宫的‘.’表示空地,即为可以走的地方。‘*’表示陷阱,即为不能走的地方。迷宫中有一个英文字母,表示机器人的出发点,字母只有’U’,’D’,’L’,’R’四种。分别表示机器人的初始指令是向上,向下,向左,向右。
输出
对于每组数据,输出一个整数,即机器人一共经过多少个方格。
样例输入
2 3 U.. .*. 4 4 R... .**. .**. ....
样例输出
4 12
来源/分类
1 #include<iostream> 2 3 using namespace std; 4 char map[15][15]; 5 int w, h;//U’,’D’,’L’,’R’ 6 bool isCanGo(int x, int y, char d){ 7 if (d == ‘L‘){ 8 if (y - 1 >= 0 && map[x][y - 1] != ‘*‘) 9 return true; 10 } 11 else if (d == ‘R‘){ 12 if (y + 1 < h && map[x][y + 1] != ‘*‘) 13 return true; 14 } 15 else if (d == ‘U‘){ 16 if (x - 1 >= 0 && map[x-1][y] != ‘*‘) 17 return true; 18 } 19 else if (d == ‘D‘){ 20 if (x + 1 < w && map[x+1][y] != ‘*‘) 21 return true; 22 } 23 return false; 24 } 25 int main12313(){ 26 while (cin >> w >> h){ 27 char d; 28 int posx, posy; 29 for (int i = 0; i < w; i++){ 30 cin >> map[i];//这里的输入太坑了,没有空格,每行就是一个输入 31 // R**** *****,注意这里的输入 32 for (int j = 0; j < h; j++){ 33 //cin >> map[i][j]; 34 if (map[i][j] == ‘U‘ || map[i][j] == ‘D‘ || map[i][j] == ‘L‘ || map[i][j] == ‘R‘){ 35 posx = i; 36 posy = j; 37 d = map[i][j]; 38 } 39 } 40 } 41 int num = 1,time=1; 42 while (1){ 43 if (isCanGo(posx, posy, d)){//走一步,并刷新time的值,走过格子的加一 44 time = 1; 45 num += 1; 46 map[posx][posy] = ‘*‘; 47 if (d == ‘U‘){ 48 posx = posx - 1; 49 } 50 else if (d == ‘D‘){ 51 posx = posx + 1; 52 } 53 else if (d == ‘L‘){ 54 posy -= 1; 55 } 56 else if (d == ‘R‘){ 57 posy += 1; 58 } 59 //cout << posx << " " << posy << endl; 60 } 61 else if(time==1){//调整方向,time减一 62 time--; 63 if (d == ‘U‘){ 64 d = ‘R‘; 65 } 66 else if (d == ‘D‘){ 67 d = ‘L‘; 68 } 69 else if (d == ‘L‘){ 70 d = ‘U‘; 71 } 72 else if (d == ‘R‘){ 73 d = ‘D‘; 74 } 75 //cout << "convert!" << d << endl; 76 } 77 else{ 78 break; 79 } 80 } 81 cout << num << endl; 82 } 83 return 0; 84 }
原文地址:https://www.cnblogs.com/tangyimin/p/10580698.html
时间: 2024-11-09 12:53:35