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 ------ ...
随机推荐
- 696. Count Binary Substrings统计配对的01个数
[抄题]: Give a string s, count the number of non-empty (contiguous) substrings that have the same numb ...
- 13-爬取百度贴吧中的图片(python+xpath)
通过xpath分析页面,爬取页面中的图片: #_*_ coding: utf-8 _*_ ''' Created on 2018年7月15日 @author: sss function: 使用xpat ...
- lucene和solr
我们为什么要用solr呢? 1.solr已经将整个索引操作功能封装好了的搜索引擎系统(企业级搜索引擎产品) 2.solr可以部署到单独的服务器上(WEB服务),它可以提供服务,我们的业务系统就只要发送 ...
- Python pandas DataFrame操作
1. 从字典创建Dataframe >>> import pandas as pd >>> dict1 = {'col1':[1,2,5,7],'col2':['a ...
- MYSQL优化——索引覆盖
索引覆盖:如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要进行到磁盘中找数据,若果查询得列不是索引的一部分则要到磁盘中找数据. 建表: create table test_ind ...
- css总结18:HTML 表单和inut各个常用标签
1 HTML 表单和输入 1.1 HTML 表单介绍 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中输入内容,比如:文本域(textarea).下拉列表.单选框(radio-buttons ...
- ArcGIS Engine 中对栅格数据的波段信息统计 (转)
先打开栅格文件所在的工作空间(文件),然后获取其所有的波段,访问每一个波段有时候波段中已经有直方图或统计信息,有时候没有这些信息,可以使用ComputeStatsAndHist()函数对其进行计算(数 ...
- SNMP协议学习笔记
什么是SNMP协议? SNMP协议是以UDP为基础的应用层协议,全称为 简单网络管理协议,用于网络管理系统与被管设备(路由器,交换机,服务器等设备)进行通信. 应用场景 随着网络设备的增多,需要单独的 ...
- Spring:配置文件
首先是bean.xml,配置所有的bean,一般也叫applicationContext.xml,应用程序上下文.示例: <?xml version="1.0" encodi ...
- 【转】android 手势识别和VelocityTracker
参考地址: http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html http://www.jcodecraeer.co ...