The GO command has one integer parameter n in {1,2,3}. After receiving this command the robot moves n meters in the direction it faces.
The TURN command has one parameter which is either left or right. After receiving this command the robot changes its orientation by 90o in the direction indicated by the parameter.
The execution of each command lasts one second.
Help researchers of RMI to write a program which will determine the minimal time in which the robot can move from a given starting point to a given destination.
Input
Output
Sample Input
9 10
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 1 0
7 2 2 7 south
0 0
Sample Output
12 题目大意:
就是给机器人编一个行走的代码,求最短的时间,其实就是最短路。
这个有点不同,第一个是有方向,第二个是他是一个圆,不是点有面积。
思路:
用bfs,先处理这三种步法,走一步,走两步,走三步,
处理完之后再处理方向。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;
int n,m,x1,y1,x2,y2,d;
char b[20];
int tu[105][105];
bool vis[105][105][4];
int dx[4]={-1,0,1,0};//这里要注意东南西北相对应
int dy[4]={0,1,0,-1};
struct node
{
int x,y,step,fang;
};
int check(int x,int y)
{
if(x<1||y<1||x>=n||y>=m||tu[x][y]||tu[x+1][y]||tu[x][y+1]||tu[x+1][y+1]) return 0;//因为是左上角,所以x不能等于n,同理y也不能等于m。
return 1;
}
int bfs()
{
queue<node>que;
node a;
a.x=x1;
a.y=y1;
a.fang=d;
a.step=0;
que.push(a);
vis[a.x][a.y][a.fang]=1;
while(!que.empty())
{ a=que.front();que.pop();
if(a.x==x2&&a.y==y2) return a.step;
node ex=a;//注意这个ex要定义在外面,因为ex会累加,累加一次说明走一步,两次走两步,以此类推
for(int i=1;i<4;i++)//第一个for来走步数,三种情况,所以三次循环
{
ex.x+=dx[a.fang];
ex.y+=dy[a.fang];
if(!check(ex.x,ex.y)) break;
if(!vis[ex.x][ex.y][a.fang])
{
ex.fang=a.fang;
vis[ex.x][ex.y][ex.fang]=1;
ex.step=a.step+1;
que.push(ex);
}
}
for(int i=0;i<4;i++)//第二个for来走方向,四种情况,四次循环
{
if(max(a.fang,i)-min(a.fang,i)==2) continue;
if(vis[a.x][a.y][i]) continue;
vis[a.x][a.y][i]=1;
node ex=a;
ex.fang=i;
ex.step=a.step+1;
que.push(ex);
}
}
return -1;
} int main()
{
while(scanf("%d%d",&n,&m)&&(n+m))
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
scanf("%d",&tu[i][j]);
}
memset(vis,0,sizeof(vis));
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
scanf("%s",b);
if(b[0]=='n') d=0;
if(b[0]=='e') d=1;
if(b[0]=='s') d=2;
if(b[0]=='w') d=3;
printf("%d\n",bfs());
}
return 0;
}
寒假训练——搜索——C - Robot的更多相关文章
-
寒假训练——搜索 K - Cycle
A tournament is a directed graph without self-loops in which every pair of vertexes is connected by ...
-
寒假训练——搜索 E - Bloxorz I
Little Tom loves playing games. One day he downloads a little computer game called 'Bloxorz' which m ...
-
寒假训练——搜索 G - Xor-Paths
There is a rectangular grid of size n×mn×m . Each cell has a number written on it; the number on the ...
-
J - Abbott&#39;s Revenge 搜索 寒假训练
题目 题目大意:这个题目就是大小不超过9*9的迷宫,给你起点终点和起点的方向,让你进行移动移动特别之处是不一定上下左右都可以,只有根据方向确定可以走的方向.思路:需要写一个读入函数,这个需要读入起点, ...
-
寒假训练 A - A Knight&#39;s Journey 搜索
Background The knight is getting bored of seeing the same black and white squares again and again an ...
-
算法专题训练 搜索a-T3 Ni骑士(ni)
搞了半天八数码弄不出来就只好来打题解 这道题是在搜索a碰到的(链接: http://pan.baidu.com/s/1jG9rQsQ ) 感觉题目最大亮点就是这英文简写"ni", ...
-
HRBUST - 2347 - 递归画图 - vj大一上寒假训练2.11
其他题可由本题变形得到. 思路:利用坐标dfs搜索. 注意:1,初始化.2,坐标实时更新(x,y) 代码: #include<iostream> #include<cstdio> ...
-
寒假集训——搜索 B - Sudoku
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream&g ...
-
寒假集训——搜索 D - Cubes for Masha
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <string.h&g ...
随机推荐
-
ios - NSTimer中target的self是强引用问题
当控制器ViewController跳转进入控制器OneViewController中的时候开启定时器,让定时器每隔一段时间打印一次,当OneViewController dismiss的时候,控制器 ...
-
Angular--页面间切换及传值的四种方法
1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个produce ...
-
【编程题目】题目:定义 Fibonacci 数列 输入 n,用最快的方法求该数列的第 n 项。
第 19 题(数组.递归):题目:定义 Fibonacci 数列如下:/ 0 n=0f(n)= 1 n=1/ f(n-1)+f(n-2) n=2输入 n,用最快的方法求该数列的第 n 项. 思路:递归 ...
-
工作随笔——xshell4安装后应该做的一些事
xshell4默认支持中文语言 选项→键盘和鼠标:设置快捷键,鼠标按键(可以提高工作效率) 1.选定文本自动复制到剪贴板 选择→将选定的文本自动复制到剪贴板(选上) 2.更高鼠标中间按钮和右键按钮的功 ...
-
Scripting Languages
Computer Science An Overview _J. Glenn *shear _11th Edition A subset of the imperative programmi ...
-
mysql Encryption and Compression Functions
Name Description AES_DECRYPT() Decrypt using AES AES_ENCRYPT() Encrypt using AES COMPRESS() Return r ...
-
理解WEB API网关
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
-
JVM远程调试功能
有时候想调试线上的程序 可以启用远程调试功能 在本地调试远程代码. 远程JVM启用调试模式 /usr/local/jdk/bin/java -server -Xms256m -Xmx256m -XX: ...
-
springboot rabbitmq整合
这一篇我们来把消息中间件整合到springboot中 ===================================================================== 首先在 ...
-
CSS魔法堂:一起玩透伪元素和Content属性
前言 继上篇<CSS魔法堂:稍稍深入伪类选择器>记录完伪类后,我自然而然要向伪元素伸出"魔掌"的啦^_^.本文讲讲述伪元素以及功能强大的Contet属性,让我们可以通 ...