1021: 机器人走迷宫(2017年中南大学研究生复试机试题 )

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

来源/分类

2017年中南大学研究生复试机试题

 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

1021: 机器人走迷宫(2017年中南大学研究生复试机试题 )的相关文章

1022: 淘金(2017年中南大学研究生复试机试题 )

1022: 淘金 时间限制: 1 Sec  内存限制: 128 MB提交: 205  解决: 75[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 在一片n*m的土地上,每一块1*1的区域里都有一定数量的金子.这一天,你到这里来淘金,然而当地人告诉你,如果你挖了某一区域的金子,上一行,下一行,左边,右边的金子你都不能被允许挖了.那么问题来了:你最多能淘金多少? 输入 对于每组数据,第一行两个数n,m,表示土地的长和宽(1<=n,m<=200) 接下来n行,每行m个数,表示每个区域

1023: 巨人排队(2017年中南大学研究生复试机试题 )

1023: 巨人排队 时间限制: 1 Sec  内存限制: 128 MB提交: 185  解决: 58[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 巨人国的小学生放假了,老师要给小朋友们排队了.可是这个老师有强迫症,一定要路队上的小朋友按照身高从高到矮排序(也就是排在前面的不能比后面的矮).小朋友呢也很调皮,一旦老师给他排好队就不愿意动了.这个时候小朋友们一个一个的从教室里出来了,每个小朋友一出来老师就要给小朋友安排好位置.请问老师最少要给小朋友排几条路队呢? 输入 对于每组数

1027: 逃离迷宫(2018年中南大学研究生复试机试题)

1027: 逃离迷宫 时间限制: 1 Sec  内存限制: 128 MB提交: 611  解决: 130[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 PIPI被困在一个迷宫中了!   给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,PIPI想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,PIPI可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位置,只能走到与它相邻的4个位置中,当然在行走过程中,PIPI不能走到迷宫外面去.令人头痛的是,PIPI是个

1028: 安全路径(2014年中南大学研究生复试机试题 )

1028: 安全路径 时间限制: 1 Sec  内存限制: 128 MB提交: 228  解决: 96[提交][状态][讨论版] 题目描述 卫斯理小说经常提及外星人,比如蓝血人. 在土星星球有很多城市,每个城市之间有一条或多条飞行通道, 但是并不是所有的路都是很安全的,每一条路有一个安全系数 s,s 是在  0  和1 间的实数 (包括 0 , 1) ,一条从 u 到 v 的通道 P 的安全度为 Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 ,现在蓝血人

1008: 最大连续子序列(2014年中南大学研究生复试机试题 )

1008: 最大连续子序列 时间限制: 1 Sec  内存限制: 128 MB提交: 461  解决: 80[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 给定 K 个整数的序列{ N1,  N2,  ..., NK } ,其任意连续子序列可表示为{ Ni, Ni+1,...,Nj} ,其中1 <= i<= j <= K.最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 } ,其最大连续子序列为{ 11, -4

Python 之 使用Tkinter 做GUI 研究机器人走迷宫

这本是课程的一个作业研究搜索算法,当时研究了一下Tkinter,然后写了个很简单的机器人走迷宫的界面,并且使用了各种搜索算法来进行搜索,如下图: 使用A*寻找最优路径: 由于时间关系,不分析了,我自己贴代码吧.希望对一些也要用Tkinter的人有帮助. from Tkinter import * from random import * import time import numpy as np import util class Directions: NORTH = 'North' SOU

(动态规划)机器人走迷宫问题

题目一:https://www.nowcoder.com/practice/166eaff8439d4cd898e3ba933fbc6358?tpId=46&tqId=29117&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking 题目翻译: 机器人位于m x n网格的左上角(在下图中标记为"开始"). 机器人只能在任何时间点向下或向右移动. 机器人试图到达网格的右下角(在

惠民工程(2013中南大学研究生复试[最小生成树])

惠民工程 CSU - 1264 时限: 1000MS   内存: 131072KB   64位IO格式: %lld & %llu 提交 状态 已开启划词翻译 问题描述点击打开链接 市政府"惠民工程"的目标是在全市n个居民点间之架设煤气管道(但不一定有直接的管道相连,只要能间接通过管道可达即可).很显然最多可架设 n(n-1)/2条管道,然而实际上要连通n个居民点只需架设n-1条管道就可以了.现请你编写程序,计算出该惠民工程需要的最低成本. 输入 测试输入包含若干测试用例.每个测

水仙花数(2013中南大学研究生上机复试题)

1261: 水仙花数 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 633 Solved: 222 [Submit][Status][Web Board] 点击打开链接 Description 春天是鲜花灿烂的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:"水仙花数"是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3.现在要求输出所有在m和n范围内的水仙花数. Input 输入数据