POJ2225+BFS
简单的BFS 1a
/*
从起点到终点
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std; const int maxn = ;
const int Max = ;
char mat[ maxn ][ maxn ][ maxn ];
int vis[ maxn ][ maxn ][ maxn ];
const int dx[]={,,,-,,};
const int dy[]={,-,,,,};
const int dz[]={,,,,,-};
struct node{
int x,y,z,ti;
}my_start,my_end; bool ok( node cur ){
if( mat[ cur.z ][ cur.x ][ cur.y ]=='X'||vis[ cur.z ][ cur.x ][ cur.y ]== )
return false;
else
return true;
} bool inside( node cur,int n ){
if( cur.x>=&&cur.x<n&&cur.y>=&&cur.y<n&&cur.z>=&&cur.z<n )
return true;
else
return false;
} int bfs( int n ){
if( my_start.x==my_end.x&&my_start.y==my_end.y&&my_start.z==my_end.z )
return ;
queue<node>q;
node cur,nxt;
int ans = Max;
cur.x = my_start.x;
cur.y = my_start.y;
cur.z = my_start.z;
cur.ti = ;
vis[ cur.z ][ cur.x ][ cur.y ] = ;
q.push( cur );
while( !q.empty() ){
cur = q.front();
q.pop();
if( cur.x==my_end.x&&cur.y==my_end.y&&cur.z==my_end.z ){
ans = min( ans,cur.ti );
}
for( int i=;i<;i++ ){
nxt = cur;
nxt.ti ++;
nxt.x += dx[i];
nxt.y += dy[i];
nxt.z += dz[i];
if( inside( nxt,n )==false||ok( nxt )==false ) continue;
vis[ nxt.z ][ nxt.x ][ nxt.y ] = ;
q.push( nxt );
}
} if( ans>=Max ) return -;
else return ans;
} int main(){
int N;
char str[ maxn ];
while( scanf("%s%d",str,&N)!=EOF ){
memset( vis,,sizeof( vis ) );
for( int i=;i<N;i++ ){
for( int j=;j<N;j++ ){
scanf("%s",mat[ i ][ j ]);
}
}
//mat[i][j][k] 层 行 列
scanf("%d%d%d",&my_start.y,&my_start.x,&my_start.z);
scanf("%d%d%d",&my_end.y,&my_end.x,&my_end.z);
//列 行 层
scanf("%s",str);
int ans = bfs( N );
if( ans==- ) printf("NO ROUTE\n");
else printf("%d %d\n",N,ans);
}
return ;
}
POJ2225+BFS的更多相关文章
- hdu1240/poj2225 BFS广搜的再理解
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/guodongxiaren/article/details/37756347 原题地址 pid=124 ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
- Sicily 1215: 脱离地牢(BFS)
这道题按照题意直接BFS即可,主要要注意题意中的相遇是指两种情况:一种是同时到达同一格子,另一种是在移动时相遇,如Paris在(1,2),而Helen在(1,2),若下一步Paris到达(1,1),而 ...
- Sicily 1048: Inverso(BFS)
题意是给出一个3*3的黑白网格,每点击其中一格就会使某些格子的颜色发生转变,求达到目标状态网格的操作.可用BFS搜索解答,用vector储存每次的操作 #include<bits/stdc++. ...
- Sicily 1444: Prime Path(BFS)
题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...
- Sicily 1051: 魔板(BFS+排重)
相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...
随机推荐
- JavaScript入门(9)
一.Math对象 Math对象,提供对数据的数学计算 使用Math的属性和方法,代码如下: <script type="text/javascript"> var my ...
- 一些实用的js高级技巧
技巧一之setTimeout. 应用案例:比如你想一个函数循环执行10次,怎么办?以前通常是先setInterval,然后clearInterval,技巧一就是克服这个问题 (function () ...
- JobControl管理多job依赖完整示例
处理 复杂的要求的时候,有时一个mapreduce程序是完成不了的,往往需要多个mapreduce程序,这个时候就要牵扯到各个任务之间的依赖关系,所谓 依赖就是一个MR Job 的处理结果是另外的MR ...
- TortoiseSVN 安装中文语言包,SVN中文语言包
SVN中TortoiseSVN 是比较出门的一款SVN软件 TortoiseSVN 是Subversion 版本控制系统的一个免费开源客户端. 由于TortoiseSVN 默认是英文的:所以很多小伙伴 ...
- Hibernate+struts+JqueryAjax+jSON实现无刷新三级联动
看网上JqueryAjax三级联动的例子讲不是很全,代码也给的不是很全,给初学者带来一定的难度.小弟自己写了一个,可能有些地方不是很好,希望大家能够提出建议. 用的是Hibernate+struts2 ...
- css 利用border属性制作箭头 Using Borders to Make Pure CSS Arrows
不再需要多余的图片 用border属性自然能创造箭头效果 学习地址:http://tech.patientslikeme.com/2010/11/09/using-borders-to-make-pu ...
- CSS3滤镜!!!
<!DOCTYPE html> <html> <head> <style> img { width: 33%; height: auto; float: ...
- 在Linux上进行QT UI开发
在QT Creator UI编辑器上通过拖拽各种控件产生UI界面,然后点击编译/Build按钮,会自动生成对应的ui_xxxx.h的 头文件/header file. 参考: 1.Linux上使用Qt ...
- C++ #pragma 预处理指令
#pragma 预编译指令的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征 ...
- 二叉搜索的各种bugs——重复递增序列
int binary_search(int* A, int value, int p, int r); int main(int argc, char *argv[]){ , , , , , , , ...