poj2935:http://poj.org/problem?id=2935

题意:在6*6的格子中,有一些,如果两个格子之间有墙的话,就不能直接相通,问最少要经过几步才能从起点走到终点。并且输出路径。

题解:直接bfs

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
struct Node{
int sal;
char path[]; }; //用来记录当前节点的到起点的最小值以及取得这个最小值所对应的路径
int sx ,sy,dx,dy;//记录起点和终点坐标
Node mit[][];
struct Node1{
int x;
int y;
int step;
};//记录当前节点的坐标和对应的步数
struct point{
int up,down,left,right; }; //记录该节点的上下左右是否有墙壁
point map[][];
Node bfs(){
queue<Node1>Q;
Node1 temp;
temp.x=sx;
temp.y=sy;
temp.step=;
Q.push(temp);
while(!Q.empty()){
Node1 tmp;
tmp=Q.front();
Q.pop();
int xx=tmp.x;
int yy=tmp.y;
if(yy>=&&map[xx][yy].up==&&tmp.step+<mit[xx][yy-].sal){//向周围四个方向收索,满足条件就放进队列
Node1 tt;
tt.x=xx;
tt.y=yy-;
tt.step=tmp.step+;
mit[xx][yy-].sal=tmp.step+;
for(int i=;i<=mit[xx][yy].sal;i++){
mit[xx][yy-].path[i]=mit[xx][yy].path[i];
}
mit[xx][yy-].path[mit[xx][yy-].sal]='N'; //这里是把更新当前节点的路径
Q.push(tt); //通过复制前一步的路径,以及加上这一步的路径来实现
}
if(yy<&&map[xx][yy].down==&&tmp.step+<mit[xx][yy+].sal){
Node1 tt;
tt.x=xx;
tt.y=yy+;
tt.step=tmp.step+;
mit[xx][yy+].sal=tmp.step+;
for(int i=;i<=mit[xx][yy].sal;i++){
mit[xx][yy+].path[i]=mit[xx][yy].path[i];
}
mit[xx][yy+].path[mit[xx][yy+].sal]='S';
Q.push(tt); } if(xx>=&&map[xx][yy].left==&&tmp.step+<mit[xx-][yy].sal){
Node1 tt;
tt.x=xx-;
tt.y=yy;
tt.step=tmp.step+;
mit[xx-][yy].sal=tmp.step+;
for(int i=;i<=mit[xx][yy].sal;i++){
mit[xx-][yy].path[i]=mit[xx][yy].path[i];
}
mit[xx-][yy].path[mit[xx-][yy].sal]='W';
Q.push(tt); }
if(xx<&&map[xx][yy].right==&&tmp.step+<mit[xx+][yy].sal){
Node1 tt;
tt.x=xx+;
tt.y=yy;
tt.step=tmp.step+;
mit[xx+][yy].sal=tmp.step+;
for(int i=;i<=mit[xx][yy].sal;i++){
mit[xx+][yy].path[i]=mit[xx][yy].path[i];
}
mit[xx+][yy].path[mit[xx+][yy].sal]='E';
Q.push(tt);
} }
return mit[dx][dy]; } int main(){ while(~scanf("%d%d",&sx,&sy)){
if(sx==&&sy==)break;
scanf("%d%d",&dx,&dy);
for(int i=;i<=;i++)
for(int j=;j<=;j++){
map[i][j].up=map[i][j].down=map[i][j].left=map[i][j].right=;
} //初始化图
for(int i=;i<=;i++){
map[i][].up=;
map[i][].down=;
map[][i].left=;
map[][i].right=;
} //这里是对第一行和最后一行以及第一列和最后一列做特殊处理
int x1,y1,x2,y2;
for(int i=;i<=;i++){
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(x1==x2)//竖的放的(对墙壁的处理)
for(int i=y1+;i<=y2;i++)
{ if(x1>)
map[x1][i].right=;
if(x1<)
map[x1+][i].left=;
}
if(y1==y2){ //横着放着
for(int i=x1+;i<=x2;i++){
if(y1>)
map[i][y1].down=;
if(y1<)
map[i][y1+].up=; }
}
}
for(int i=;i<=;i++)
for(int j=;j<=;j++)
mit[i][j].sal=;
mit[sx][sy].sal=;//注意这里的初始化
Node ans=bfs();
for(int i=;i<=ans.sal;i++)
printf("%c",ans.path[i]);//打出路径
printf("\n");
}
}

Basic Wall Maze的更多相关文章

  1. HDU 1484 Basic wall maze (dfs + 记忆)

    Basic wall maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. poj-2935 BFS Basic Wall Maze

    Basic Wall Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3384   Accepted: 1525   ...

  3. 【HDOJ】1484 Basic wall maze

    BFS. /* 1484 */ #include <iostream> #include <queue> #include <string> #include &l ...

  4. poj 2935 Basic Wall Maze

    是一个图论的基础搜索题- 没什么好说的就是搜索就好 主要是别把 代码写的太屎,错了不好找 #include<cstdio> #include<algorithm> #inclu ...

  5. (BFS)poj2935-Basic Wall Maze

    题目地址 题目与最基本的BFS迷宫的区别就是有一些障碍,可以通过建立三维数组,标记某个地方有障碍不能走.另一个点是输出路径,对此建立结构体时要建立一个pre变量,指向前一个的下标.这样回溯(方法十分经 ...

  6. HOJ题目分类

    各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...

  7. poj 2395 bfs/记录路径

    http://poj.org/problem?id=2935 Basic Wall Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  8. ACM/ICPC 之 BFS-简单障碍迷宫问题(POJ2935)

    题目确实简单,思路很容易出来,难点在于障碍的记录,是BFS迷宫问题中很经典的题目了. POJ2935-Basic Wall Maze 题意:6*6棋盘,有三堵墙,求从给定初始点到给定终点的最短路,输出 ...

  9. Clojure——学习迷宫生成

    背景 初学clojure,想着看一些算法来熟悉clojure语法及相关算法实现. 找到一个各种语言生成迷宫的网站:http://rosettacode.org/wiki/Maze_generation ...

随机推荐

  1. XtraReport交叉表隐藏列标题及自定义排序

    1.隐藏列标题 用DevExpress PivotGrid report 做报表的时候,将字段拖放到报表中后,ColumnArea和DataArea会显示两个标题字段,如下图: 选中交叉表,设置以下属 ...

  2. [AngularJS + Webpack] Requiring CSS & Preprocessors

    Making your CSS modular is a difficult thing to do, but using Webpack makes this so much easier. By ...

  3. cmake 手册系列

    http://www.cnblogs.com/coderfenghc/archive/2012/06/16/CMake_ch_01.html

  4. 基于HTML5的SLG游戏开发( 二):创建HTML5页面

    HTML5游戏的开发过程中是在浏览器上进行运行调试的,所以首先我们需要建立一个html页面. 其中,我们把所有的canvas都放到一个viewporter(视图)里面,因此,在body中放置了一个id ...

  5. iOS NavigaitonController详解(code版)

    参考文章:http://blog.csdn.net/totogo2010/article/details/7681879,参考了这篇文章,写的超级好,自己他的基础上加上了自己的理解. 下面的图显示了导 ...

  6. [转] nginx 开启gzip压缩--字符串压缩比率很牛叉

    http://www.cnblogs.com/dasn/articles/3716055.html 刚刚给博客加了一个500px相册插件,lightbox引入了很多js文件和css文件,页面一下子看起 ...

  7. [转] 用实例给新手讲解RSA加密算法

    http://www.cfca.com.cn/zhishi/wz-012.htm PS: 通常公钥对数据加密,私钥对数据解密:私钥对数据签名,公钥对数据签名进行认证 RSA加密算法是最常用的非对称加密 ...

  8. Mac OS命令行运行Sublime Text

    Opening Sublime Text on command line as subl on Mac OS? Mac OS subl http://www.phodal.com/blog/mac-o ...

  9. javascript动画效果

    之前工作项目中,运用了缓动动画的效果,在网上看到其他大牛写的相关公式,结合工作需要,进行了整理,拿出来跟大家分享下,js代码中,只运用了一个小功能进行了测试 <!DOCTYPE html> ...

  10. sublime的js调试环境(基于node环境)

    很多的语言都有控制台,都要专门的ide,js,用sublime在node的环境下,可以配置console, 如何配置?首先,要有node的环境,下载安装,还要安装到c盘才行,然后找到'工具(tool) ...