(BFS)poj2935-Basic Wall Maze
题目与最基本的BFS迷宫的区别就是有一些障碍,可以通过建立三维数组,标记某个地方有障碍不能走。另一个点是输出路径,对此建立结构体时要建立一个pre变量,指向前一个的下标。这样回溯(方法十分经典)就可以顺利的输出。
这道题难度的确很小,可是我却花了近两个小时才顺利AC,实在是现在水平太不足了,要努力学习的真的是有好多啊。不管怎样,尽力吧。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
struct grid
{
int x,y;//坐标
int pre;//回溯前一个的下标
int dir;
}point[];
int si,sj,ei,ej,a[],dir[][][],direction[][]={{-,},{,},{,},{,-}},vi[][];
int bfs()
{
memset(vi,,sizeof(vi));
int front=,tail=;
point[front].x=si;
point[front].y=sj;
point[front].pre=-;
grid temp,temp2;
vi[si][sj]=;
while(front<tail)
{
temp=point[front];
for(int i=;i<;i++)
{
if(dir[temp.x][temp.y][i]==){continue;}
else
{
temp2.x=temp.x+direction[i][];
temp2.y=temp.y+direction[i][];
temp2.dir=i;
if(vi[temp2.x][temp2.y])
continue;
else
{
temp2.pre=front;
vi[temp2.x][temp2.y]=;
point[tail++]=temp2;
if(temp2.x==ei&&temp2.y==ej)
return (tail-);
}
}
}
front++;
}
}
void print(int x)//经典的输出方式
{
if(x>)
{
print(point[x].pre);
if(point[x].dir==)
{
printf("N");
}
else if(point[x].dir==)
{
printf("E");
}
else if(point[x].dir==)
{
printf("S");
}
else printf("W");
} }
int main()
{
while(scanf("%d%d",&sj,&si))
{
int i,j,k,an;
if(si==&&sj==)
break;
scanf("%d%d",&ej,&ei);
memset(dir,,sizeof(dir));
for(i=;i<=;i++)
{
dir[][i][]=;
dir[][i][]=;
dir[i][][]=;
dir[i][][]=;
}
for(j=;j<;j++){
scanf("%d %d %d %d",&a[],&a[],&a[],&a[]);//注意数据是行列与平常不同的 if(a[]==a[])
{
for(k=min(a[],a[])+;k<max(a[],a[])+;k++)
{
dir[a[]+][k][]=;
dir[a[]][k][]=;
}
}
else
{
for(k=min(a[],a[])+;k<max(a[],a[])+;k++)
{
dir[k][a[]+][]=;
dir[k][a[]][]=;
}
}
}
an=bfs();
print(an);
puts("");
}
return ;
}
(BFS)poj2935-Basic Wall Maze的更多相关文章
- poj-2935 BFS Basic Wall Maze
Basic Wall Maze Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3384 Accepted: 1525 ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)求解迷宫问题
用下面这个简单的迷宫图作为例子: OXXXXXXX OOOOOXXX XOXXOOOX XOXXOXXO XOXXXXXX XOXXOOOX XOOOOXOO XXXXXXXO O为通路,X为障碍物. ...
- HDU 1484 Basic wall maze (dfs + 记忆)
Basic wall maze Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
随机推荐
- 夺命雷公狗-----React---6--props多属性的传递
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- generated clock
内部时钟的定义: create_generated_clock,通过-source,-edges,-divide_by,-multiply_by来执行clock沿. create_generated_ ...
- z/OS上Dataset 的移动
最近的一个需求,需要把大批量的Dataset移到新的Storage Class,新的Volume中去,刚开始感觉非常头疼.仔细研究后发现这个事情其实很简单.确实符合别人所说,事情的在你真正开始努力之后 ...
- IOS new Date() 时间转换失败问题以及其他问题
一: ios下必须标准格式用'/'分割格式 转换没问题: new Date('2016/5/30 12:15:20') 二:ie9兼容模式以及以下ie版本 console用前需判断 if(windo ...
- css3 calc()方法详解
calc()对大家来说,或许很陌生,不太会相信calc()是css中的部分.因为看其外表像个函数,既然是函数为何又出现在CSS中呢?这一点也让我百思不得其解,今天有一同事告诉我,说CSS3中有一个属性 ...
- openvpn之搭建配置
一.openvpn原理 openvpn通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Publice key,另外一个是Private key)对数据进行加密的.这种方式称为TLS加密 ...
- ATI Radeon HD 5450 with full QE/CI Support ( 转载 )
ATI Radeon HD 5450 with full QE/CI Support - DSDT (Contains HDMI Audio Edit Too) & AGPM included ...
- JS部分代码分享
2015-10-12 : 1.search()表达式:搜索索引 <!DOCTYPE html><html><body> <p>搜索字符串 "w ...
- Python namedtuple
我们都知道Python中的tuple是一个非常高效的集合对象,但是我们只能通过索引的方式访问这个集合中的元素,比如下面的代码: Bob=('bob',30,'male') print'Represen ...
- php中的访问修饰符 private、protected、public的作用范围
1. private 只能在类内部使用 2. protected 可以在类内部和继承类里使用.类外部不能使用[即实例化后的对象无法调用] 3. public 全部范围适用. 4.子类复写父类中的方法时 ...