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在迷宫右下角,只能向左或向上移动.机器人不能移动到迷宫外.此外,由于奇怪的同步机制,这两个机器人只能同时 ...
随机推荐
- 必看的dockerfile禁忌与建议!
直接上对照组(看第三个run) test1 FROM centos MAINTAINER ** RUN yum -y update RUN yum -y install wget RUN wg ...
- Android 仿百度医生的智能分诊界面
http://blog.csdn.net/jiang89125/article/details/49622853
- PHP环境搭建Zend Studio 10.6.2+WampServer2.4
址:http://www.zend.com/en/products/studio/downloads直接下载地址:http://downloads.zend.com/studio-eclipse/10 ...
- PyTorch的十七个损失函数
本文截取自<PyTorch 模型训练实用教程>,获取全文pdf请点击: tensor-yu/PyTorch_Tutorialgithub.com 版权声明:本文为博主原创文章,转载请附上 ...
- 使用Auto Layout中的VFL(Visual format language)——代码实现自动布局
本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:api介绍 1.NSLayoutConstraint API NSL ...
- 「 Luogu P2420 」 让我们异或吧
# 解题思路 两点之间的路径的话一定经过它们两个 LCA,这一点已经是显而易见的,那么再来看看异或的性质. $$a\ xor\ b\ xor\ b = a\\ a\ xor\ a=0\\ a\ xor ...
- [LOJ] 分块九题 1
https://loj.ac/problem/6277 区间修改,单点查询. //Stay foolish,stay hungry,stay young,stay simple #include< ...
- CSS3---box-shadow设置
1.box-shadow是向盒子添加阴影.支持添加一个或者多个. 2.box-shadow: X轴偏移量 Y轴偏移量 [阴影模糊半径] [阴影扩展半径] [阴影颜色] [投影方式]; 3.注意:ins ...
- 小白菜OJ 1122 公牛母牛配(最大二分图匹配模板)
题意: n只公牛和m只母牛,某些公牛和某些母牛互相喜欢.但最后一只公牛只能和一只母牛建立一对一匹配.要使得最后牛群匹配对数最大. 链接: http://caioj.cn/problem.php?id= ...
- POJ 1144 Network (求割点)
题意: 给定一幅无向图, 求出图的割点. 割点模板:http://www.cnblogs.com/Jadon97/p/8328750.html 分析: 输入有点麻烦, 用stringsteam 会比较 ...