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秒.关于康托展开可以 ...
随机推荐
- linux中的常用命令
cat tail -f 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关 ...
- MyBatis拦截器:给参数对象属性赋值
该拦截器的作用:在进行增加.修改等操作时,给数据模型的一些通用操作属性(如:创建人.创建时间.修改人.修改时间等)自动赋值. 该实现是在DAO层拦截,即存入DB前最后一层.后经分析,不是很合理,改为在 ...
- C++ 遇见的一些函数
1.位与(&)操作,计算十进制数中的为"1"的位数 int cnt_one(int k) { ; //保存位为"1"的数量 while (k) { k ...
- vbscript multiple line syntax
Vbscript 如何将输出内容换行? ' VbCrLf represetns Carriage return–linefeed combination, for more information s ...
- STL的简介
Standard Template Library,(标准模板库)<来自百度百科的整理> ————可复用性(reusability) STL是基于模板,内联函数的使用使得生成的代码短小高效 ...
- java.util.AbstractStringBuilder源码分析
AbstractStringBuilder是一个抽象类,是StringBuilder和StringBuffer的父类,分析它的源码对StringBuilder和StringBuffer代码的理解有很大 ...
- Java初始化理解与总结 转载
Java的初始化可以分为两个部分: (a)类的初始化 (b)对象的创建 一.类的初始化 1.1 概念介绍: 一个类(class)要被使用必须经过装载,连接,初始化这样的过程. 在装载阶段,类装载器会把 ...
- JavaScript 作用域和作用域链
作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望 ...
- html标签对应的英文原文
标签 对应英文 说明 <!--> / 注释 <!DOCTYPE> document type 文档类型 <a> anchor 超链接 <abbr> ab ...
- [转] Js获取 本周、本月、本季度、本年、上月、上周、上季度、去年时间段
/** * 针对时间的工具类 */ var DateTimeUtil = function () { /*** * 获得当前时间 */ this.getCurrentDate = function ( ...