poj1376 bfs,机器人
开始时候有点怕, 感觉什么也不会,不过静下来思考思考也就想出来了,一个简单的BFS即可,但是由于队列没有重判,一直爆队列(MLE!)下次一定要注意!
(bfs第一次到达便最优?)
#include<queue>
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int a[52][52];
bool mark[52][52][5]; //三个状态的重判
struct xy
{
int x,y;
int chaoxiang;
int count;
};
int minconmand;
int n,m;
void bfs(xy from,xy last) //如果不判重!必然爆队列!
{
queue<xy>q;
q.push(from);
mark[from.x][from.y][from.chaoxiang]=1;
while(!q.empty())
{
xy cur=q.front();
q.pop();
if(cur.x==last.x&&cur.y==last.y)
{
if(cur.count<minconmand)minconmand=cur.count;
// cout<<minconmand<<endl;
return ;
}
else
{
xy next(cur);
next.count++;
if(next.count>=minconmand)continue;
next.chaoxiang=((next.chaoxiang+1==5)?1:(next.chaoxiang+1));
if(mark[next.x][next.y][next.chaoxiang]==0)
q.push(next);
mark[next.x][next.y][next.chaoxiang]=1; next=cur;
next.count++;
next.chaoxiang=((cur.chaoxiang-1==0)?4:(cur.chaoxiang-1));
if(mark[next.x][next.y][next.chaoxiang]==0)
q.push(next);
mark[next.x][next.y][next.chaoxiang]=1; next=cur;
next.count++;
if(next.chaoxiang==1)
{
for(int i=1;i<=3;i++)
{
next.x-=1;
if(next.y>=n||next.y<=0||next.x<=0||next.x>=m)continue;
if(a[next.x-1][next.y]==1||a[next.x-1][next.y-1]==1)break;
if(mark[next.x][next.y][next.chaoxiang]==0)
q.push(next);
mark[next.x][next.y][next.chaoxiang]=1;
}
}
else if(next.chaoxiang==2)
{
for(int i=1;i<=3;i++)
{
next.y-=1;
if(next.y>=n||next.y<=0||next.x<=0||next.x>=m)continue;
if(a[next.x][next.y-1]==1||a[next.x-1][next.y-1]==1)break;
if(mark[next.x][next.y][next.chaoxiang]==0)
q.push(next);
mark[next.x][next.y][next.chaoxiang]=1;
}
}
else if(next.chaoxiang==3)
{
for(int i=1;i<=3;i++)
{
next.x+=1;
if(next.y>=n||next.y<=0||next.x<=0||next.x>=m)continue;
if(a[next.x][next.y]==1||a[next.x][next.y-1]==1)break;
if(mark[next.x][next.y][next.chaoxiang]==0)
q.push(next);
mark[next.x][next.y][next.chaoxiang]=1;
} }
else if(next.chaoxiang==4)
{
for(int i=1;i<=3;i++)
{
next.y+=1;
if(next.y>=n||next.y<=0||next.x<=0||next.x>=m)continue;
if(a[next.x][next.y]==1||a[next.x-1][next.y]==1)break;
if(mark[next.x][next.y][next.chaoxiang]==0)
q.push(next);
mark[next.x][next.y][next.chaoxiang]=1;
}
}
}
}
return;
}
int main()
{
while(cin>>m>>n&&(n||m))
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
memset(mark,0,sizeof(mark));
xy from,last;
string chaoxiang;
cin>>from.x>>from.y;
cin>>last.x>>last.y;
cin>>chaoxiang;
from.count=0;
if(chaoxiang=="south")from.chaoxiang=3;
else if(chaoxiang=="north")from.chaoxiang=1;
else if(chaoxiang=="west")from.chaoxiang=2;
else if(chaoxiang=="east")from.chaoxiang=4;
minconmand=1000000;
bfs(from,last);
if(minconmand==1000000)cout<<-1<<endl;
else cout<<minconmand<<endl;
}
}
poj1376 bfs,机器人的更多相关文章
- UVa 1600 Patrol Robot (BFS最短路 && 略不一样的vis标记)
题意 : 机器人要从一个m * n 网格的左上角(1,1) 走到右下角(m, n).网格中的一些格子是空地(用0表示),其他格子是障碍(用1表示).机器人每次可以往4个方向走一格,但不能连续地穿越k( ...
- 洛谷P1126机器人搬重物[BFS]
题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有些格子为不可移动的障碍.机 ...
- BFS 巡逻机器人
巡逻机器人 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83498#problem/F 题目大意: 机器人在一个矩形区域巡逻, ...
- UVA 1600 Patrol Robot(机器人穿越障碍最短路线BFS)
UVA 1600 Patrol Robot Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu ...
- 巡逻机器人(BFS)
巡逻机器人问题(F - BFS,推荐) Description A robot has to patrol around a rectangular area which is in a form ...
- 机器人搬重物(BFS)
机器人搬重物 时间限制: 1 Sec 内存限制: 128 MB提交: 22 解决: 10[提交][状态][讨论版] 题目描述 机 器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一 ...
- UVA Planning mobile robot on Tree树上的机器人(状态压缩+bfs)
用(x,s)表示一个状态,x表示机器人的位置,s表示其他位置有没有物体.用个fa数组和act数组记录和打印路径,转移的时候判断一下是不是机器人在动. #include<bits/stdc++.h ...
- [Bzoj3205][Apio2013]机器人(斯坦纳树)(bfs)
3205: [Apio2013]机器人 Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 977 Solved: 230[Submit][Status] ...
- 【HIHOCODER 1575】 两个机器人(BFS)
描述 一个N × M的2D迷宫中有两个机器人.机器人A在迷宫左上角,只能向右或向下移动:机器人B在迷宫右下角,只能向左或向上移动.机器人不能移动到迷宫外.此外,由于奇怪的同步机制,这两个机器人只能同时 ...
随机推荐
- jsonp对付同源策略
当 协议不同或者域名/ip不同或者端口号不同 , 都不算是同源 这时候 源生的ajax 就不能进行数据请求了 JSONP json with padding 在平时的开发中也发现了 ,当我们请求 ...
- codevs 1422 河城荷取
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 在幻想乡,河城荷取是擅长高科技工业的河童.荷取的得意之作除了光学迷彩外,还有 ...
- help命令
help——获得Shell内置命令的帮助信息 命令所在路径:Shell内置命令 示例1: # help cd 使用which或者whereis查找不到路径的命令一般是Shell内置命令,cd就是一个S ...
- 【转载】SQL Server 2012 日志传送
SQL Server 2012 日志传送 一.准备: 数据库为完全恢复模式,并事先做一次完全备份. 共享一个文件夹,主机备份放在这个文件夹,而且客户机有权访问这个共享文件夹. 二.基本配置 1.启动配 ...
- Unity c# 状态机的简单入门
状态机模式在unity中作用是非常大的,可以实现角色的移动和场景的跳转,包括一些动画的播放,在很多unity框架中也是很常见的,发散思维广阔,下面是简单的状态机的实现,有注释 using System ...
- python基础一 day3 列表
字符串是有序的,列表也是有序的,有索引值,可以切片 可以用切片来截取列表中的任何部分返回得到一个新列表. 列表方法: 1:增加 结果: 例子: 结果: int类型不可迭代 结果: 删: ...
- 最短路 || POJ 1847 Tram
POJ 1847 最短路 每个点都有初始指向,问从起点到终点最少要改变多少次点的指向 *初始指向的那条边长度为0,其他的长度为1,表示要改变一次指向,然后最短路 =========高亮!!!===== ...
- [BZOJ3940]:[Usaco2015 Feb]Censoring(AC自动机)
题目传送门 题目描述: FJ把杂志上所有的文章摘抄了下来并把它变成了一个长度不超过105的字符串S.他有一个包含n个单词的列表,列表里的n个单词记为t1…tN.他希望从S中删除这些单词.FJ每次在S中 ...
- JS动态添加元素的事件动态绑定
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Yii2 advance swiftmailer 不能发送邮件
我用的是Yii2高级模板,在配置好邮箱后,并编写测试,测试结果表明是发送成功的,但我的邮箱就是接受不了邮件. 经过排查发现,是由 common/config/main-local.php 文件的 'u ...