POJ3322 Bloxorz I 无脑广搜(我死了。。。)
多测不清空,爆零两行泪。。。。我死了QWQ
每个节点3个状态:横坐标,纵坐标,和方向
说一下方向:0:立着,1:竖着躺着,上半部分在(x,y),2:横着躺着,左半部分在(x,y)
然后就有了常量数组:
const int dx[][]={{-,,,},{-,,,},{-,,,}};
const int dy[][]={{,-,,},{,-,,},{,-,,}};
const int dz[][]={{,,,},{,,,},{,,,}};
第一维是状态中的方向,第二维是要扩展的方向(0,1,2,3)
然后就搜他。。。。记得queue要清零,d要清零,sz要清零。。。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define R register int
const int dx[][]={{-,,,},{-,,,},{-,,,}};
const int dy[][]={{,-,,},{,-,,},{,-,,}};
const int dz[][]={{,,,},{,,,},{,,,}};
using namespace std;
inline int g() {
R ret=; register char ch; while(!isdigit(ch=getchar()));
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret;
}
struct node{
int x,y,z; node() {}
node(int xx,int yy,int zz):x(xx),y(yy),z(zz) {}
};
queue<node>q;
char e[][];
int n,m,sx,sy,sz,ex,ey;
int d[][][];
inline bool ckpos(int x,int y) {return x>&&x<=n&&y>&&y<=m;}
inline bool ck(int x,int y,int z) {
if(!ckpos(x,y)||e[x][y]=='#'||d[x][y][z]!=-) return false;
if(z==&&e[x][y]=='E') return false;
if(z==&&(!ckpos(x+,y)||e[x+][y]=='#')) return false;
if(z==&&(!ckpos(x,y+)||e[x][y+]=='#')) return false; return true;
}
int bfs() {
memset(d,-,sizeof(d)); while(q.size()) q.pop();
q.push(node(sx,sy,sz)); d[sx][sy][sz]=;
while(q.size()) { node u=q.front(); q.pop();
for(R i=;i<;++i) {
node v=node(u.x+dx[u.z][i],u.y+dy[u.z][i],dz[u.z][i]); //cout<<u.x<<" "<<u.y<<" "<<u.z<<" "<<v.x<<" "<<v.y<<" "<<v.z<<endl;
if(!ck(v.x,v.y,v.z)) continue;
q.push(v),d[v.x][v.y][v.z]=d[u.x][u.y][u.z]+;
if(v.x==ex&&v.y==ey&&v.z==) return d[v.x][v.y][v.z];
}
} return -;
}
signed main() {
while(n=g(),m=g(),n!=) { sz=;
for(R i=;i<=n;++i) scanf("%s",e[i]+);
for(R i=;i<=n;++i) for(R j=;j<=m;++j)
if(e[i][j]=='X') { sx=i,sy=j; e[i][j]='.';
if(j<m&&e[i][j+]=='X') sz=,e[i][j+]='.';
if(i<n&&e[i+][j]=='X') sz=,e[i+][j]='.';
} else if(e[i][j]=='O') ex=i,ey=j,e[i][j]='.';
R ans=bfs(); ans==-?printf("Impossible\n"):printf("%d\n",ans);
//for(R i=1;i<=n;++i,cout<<'\n') for(R j=1;j<=m;++j) cout<<d[i][j][0]<<" "<<d[i][j][1]<<" "<<d[i][j][2]<<" ";
}
}
2019.04.26
POJ3322 Bloxorz I 无脑广搜(我死了。。。)的更多相关文章
- 无脑博士的试管们--dfs搜素
无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直到被灌试 ...
- TOJ 2778 数据结构练习题――分油问题(广搜和哈希)
描述 设有大小不等的三个无刻度的油桶,分别能盛满x,y,z公升油.初始时,第一个油桶盛满油,第二.三个油桶为空,在某一个油桶上分出targ公升油. 输入 输入包含多组测试数据.每组数据包含一行.分别x ...
- 双向广搜+hash+康托展开 codevs 1225 八数码难题
codevs 1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Yours和zero在研究A*启 ...
- CodeForces 909E Coprocessor(无脑拓扑排序)
You are given a program you want to execute as a set of tasks organized in a dependency graph. The d ...
- POJ-3635 Full Tank? (记忆化广搜)
Description After going through the receipts from your car trip through Europe this summer, you real ...
- P3818 小A和uim之大逃离 II(bfs,有条件的广搜)
题目背景 话说上回……还是参见 https://www.luogu.org/problem/show?pid=1373 吧 小a和uim再次来到雨林中探险.突然一阵南风吹来,一片乌云从南部天边急涌过来 ...
- 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...
- Secret Milking Machine POJ - 2455 网络流(Dinic算法---广搜判断+深搜增广)+时间优化+二分
题意: 第一行输入N M C ,表示从1到N有M条无向边,现在要从1走到N 走C次完全不同的路径,求最长边的最小值.下面M行是从a点到b点的距离. 建图: 题上说从两点之间可以有多条边,问的是从1~N ...
- 【原】无脑操作:express + MySQL 实现CRUD
基于node.js的web开发框架express简单方便,很多项目中都在使用.这里结合MySQL数据库,实现最简单的CRUD操作. 开发环境: IDE:WebStorm DB:MySQL ------ ...
随机推荐
- MySQL5.7插入中文乱码
参考: https://blog.csdn.net/kelay06/article/details/60870138 https://blog.csdn.net/itmr_liu/article/de ...
- Django框架 之 查询 Extra
Django框架 之 查询 Extra extra 1 2 extra(select=None, where=None, params=None, tables=None, order_b ...
- Servlet请求转发 RequestDispatcher接口.RP
在Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应. 一,RequestDispatcher接口 ...
- 黑盒测试实践-任务进度-Day02
使用工具 selenium 小组成员 华同学.郭同学.穆同学.沈同学.覃同学.刘同学 任务进度 在经过了昨天的基本任务分配之后,今天大家就开始了各自的内容,以下是大家任务的进度情况汇总. 华同学(任务 ...
- SVN下载地址及注意事项
SVN下载地址:VisualSVN:http://www.visualsvn.com/server/download 服务器端(添加仓库和用户)TortoiseSVN:http://torto ...
- 如何处理与开发有争议的Bug?
工作中,测试人员有时会遇到类似的问题:提交了一份软件缺陷报告,可由于某种原因,无论是开发人员还是开发经理就是不愿修改程序.应如何处理这类问题呢?我认为,当对报告出现分歧意见后,测试工程师应首先做如下 ...
- 编写高质量代码改善C#程序的157个建议——建议3: 区别对待强制转型与as和is
建议3: 区别对待强制转型与as和is 在阐述本建议之前,首先需要明确什么是强制转型,以及强制转型意味着什么.从语法结构上来看,类似下面的代码就是强制转型. secondType = (SecondT ...
- indexOf(String.indexOf 方法)
字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个字符依此类推)如果说没有找到则返回 -1 返回 St ...
- Async异步委托
/// <summary> /// 异步委托 /// </summary> public delegate void AsyncHandler(); public static ...
- 定制JMeter取样器
JMeter运行你区定义自己的取样器sampler,方法很简单,只需继承类org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClie ...