POJ 1376 Robot
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 7866 | Accepted: 2586 |
Description
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 这题改了好几天。。。。。
错误的点:
1.在DEBUG的时候我尝试恢复路径,此时发现有的结点的pre信息被后来修改,是因为应当在入队的时候标记,而不是出队的时候
2.对于位置的移动判断写错,首先边界不能触碰,而且一个黑色方格周围的点也不能。
3.在枚举一个点沿着一个方向行走的可行距离的时候,当遇到黑色方块或者边界的时候要break 代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<sstream>
#include<algorithm>
#include<queue>
#include<deque>
#include<iomanip>
#include<vector>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<fstream>
#include<memory>
#include<list>
#include<string>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MAXN 109
#define N 33
#define MOD 1000000
#define INF 1000000009
const double eps = 1e-;
const double PI = acos(-1.0); int X[] = { -,,, }, Y[] = { ,,,- };
bool been[MAXN][MAXN][];//四个方向
int n, m, rx, ry, g[MAXN][MAXN];
struct node
{
int x, y, dir, time;
node() = default;
node(int _x, int _y, int _dir, int _t) :x(_x), y(_y), dir(_dir), time(_t) {}
};
node pre[MAXN][MAXN][];
int d[MAXN][MAXN];
void print(node u)
{
vector<node> v;
for (;;)
{
//cout << u.x <<' '<< u.y << ' '<< u.dir << endl;
v.push_back(u);
if (u.time == ) break;
u = pre[u.x][u.y][u.dir];
}
int cnt = ;
for (int i = v.size() - ; i >= ; i--)
{
printf("%d %d %d %d\n", v[i].x, v[i].y, v[i].dir, v[i].time);
}
}
bool CanGo(int x, int y)
{
if (x< || x >= n || y< || y >= m)
return false;
if (g[x][y] || g[x + ][y] || g[x][y + ] || g[x + ][y + ])
return false;
return true;
}
int BFS(int x, int y, int d)
{
been[x][y][d] = true;
queue<node> q;
q.push(node(x, y, d, ));
while (!q.empty())
{
node t = q.front();
q.pop();
//cout << t.x << ' ' << t.y << ' ' << t.dir <<' ' << t.time << endl; if (t.x == rx&&t.y == ry)
{
//cout << t.prex << ' ' << t.prey << "::::" << t.dir << endl;
//print(t);
return t.time;
} if (!been[t.x][t.y][(t.dir + ) % ])
{
been[t.x][t.y][(t.dir + ) % ] = true;
pre[t.x][t.y][(t.dir + ) % ] = t;
q.push(node(t.x, t.y, (t.dir + ) % , t.time + ));
}
if (!been[t.x][t.y][(t.dir - + ) % ])
{
been[t.x][t.y][(t.dir - + ) % ] = true;
pre[t.x][t.y][(t.dir - + ) % ] = t;
q.push(node(t.x, t.y, (t.dir - + ) % , t.time + ));
}
for (int i = ; i <= ; i++)
{
int tx = t.x + X[t.dir] * i, ty = t.y + Y[t.dir] * i;
if (CanGo(tx, ty))
{
if(!been[tx][ty][t.dir])
{
been[tx][ty][t.dir] = true;
pre[tx][ty][t.dir] = t;
q.push(node(tx, ty, t.dir, t.time + ));
}
}
else
break;
}
}
return -;
}
int main()
{
while (scanf("%d%d", &n, &m), n + m)
{
memset(been, false, sizeof(been));
int tx, ty, d;
char op[];
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
scanf("%d", &g[i][j]);
scanf("%d%d%d%d%s", &tx, &ty, &rx, &ry, op);
if (!CanGo(rx, ry))
{
printf("-1\n");
continue;
}
if (op[] == 'n')
d = ;
else if (op[] == 'e')
d = ;
else if (op[] == 's')
d = ;
else
d = ;
printf("%d\n", BFS(tx, ty, d));
}
}
POJ 1376 Robot的更多相关文章
- 模拟 POJ 1573 Robot Motion
题目地址:http://poj.org/problem?id=1573 /* 题意:给定地图和起始位置,robot(上下左右)一步一步去走,问走出地图的步数 如果是死循环,输出走进死循环之前的步数和死 ...
- Robot POJ - 1376
The Robot Moving Institute is using a robot in their local store to transport different items. Of co ...
- POJ 1573 Robot Motion(BFS)
Robot Motion Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12856 Accepted: 6240 Des ...
- POJ 1573 Robot Motion(模拟)
题目代号:POJ 1573 题目链接:http://poj.org/problem?id=1573 Language: Default Robot Motion Time Limit: 1000MS ...
- POJ 1573 Robot Motion
Robot Motion Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12978 Accepted: 6290 Des ...
- poj 1573 Robot Motion【模拟题 写个while循环一直到机器人跳出来】
...
- POJ 1573 Robot Motion 模拟 难度:0
#define ONLINE_JUDGE #include<cstdio> #include <cstring> #include <algorithm> usin ...
- poj 1573 Robot Motion_模拟
又是被自己的方向搞混了 题意:走出去和遇到之前走过的就输出. #include <cstdlib> #include <iostream> #include<cstdio ...
- poj 1367 robot(搜索)
题意:给你一个图,求起点 到 终点的最少时间 每次有两种选择①:往前走1~3步 ②原地选择90° 费时皆是1s 图中1为障碍物,而且不能出边界.还要考虑机器人的直径 ...
随机推荐
- html5: table表格与页面布局整理
传统表格布局之table标签排版总结: 默认样式: <style> table { max-width: 800px; border-spacing: 2px; border-coll ...
- 【BZOJ4566_洛谷3181】[HAOI2016]找相同字符(SAM)
自己yy的方法yyyyyyyy着就A了,写篇博客庆祝一下. 题目: 洛谷3181 分析: SAM(可能是)模板题(不会SAM的同学戳我:[知识总结]后缀自动机的构建). 对\(s1\)建出SAM,用\ ...
- Mac sierra下 wget安装
本文由@ray 出品,转载请注明出处. 文章链接:http://www.cnblogs.com/wolfray/p/8040699.html 没有Wget的日子是非常难过的,强大的Mac OS 下安 ...
- 依存分析 Dependency Parsing
依存分析 Dependency Parsing 句子成分依存分析主要分为两种:句法级别的和语义级别的 依存句法分析 syntactic dependency parsing 语义依存分词 semant ...
- String数据类型转换
String是final类,提供字符串不可修改.强制类型转换,String类型无处不在.下面介绍一些常见的String数据类型转换. String数据类型转换成long.int.double.floa ...
- codeforces_724C_Ray Tracing
C. Ray Tracing time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Java中的方法重写
方法的重载: 在同一个类中,出现多个同名的方法,参数列表不同,与返回值类型,修饰符无关 方法的重写: 子类中出现和父类中一模一样的方法(包括返回值类型,方法名,参数列表) 方法重写的注意事项: 1.重 ...
- CAD绘一个文字自动剧中的标注 (com接口)
主要用到函数说明: _DMxDrawX::DrawDimRotated 绘制一个线型标注.详细说明如下: 参数 说明 DOUBLE dExtLine1PointX 输入第一条界线的起始点X值 DOUB ...
- switch方法中使用数字区间
function getCategory(age) { var category = ""; switch (true) { case isNaN(age): category = ...
- JavaFX桌面应用开发-Button(按钮)与事件
1:Button样式的操作原始代码: package application; import javafx.application.Application;import javafx.scene.Gr ...