题目地址

题目与最基本的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 ;
}

最新文章

  1. SQL Server数据库SP命令祥解
  2. 项目管理详细任务(PMBOK2008)
  3. java基础(环境设置,基础语法,函数数组)
  4. iOS之与JS交互通信
  5. 四色GDOI&amp;GDOI2015滚粗记
  6. 使用Stack堆栈集合大数据运算
  7. 【转】sed 高级用法
  8. Windows平台监听服务无法启动报报TNS-12560 TNS-00530案例
  9. 进到页面后input输入框自动获取焦点
  10. Failed to bind properties under &#39;spring.datasource&#39; to javax.sql.DataSource
  11. SpringMVC处理器映射器和方法名称解析器
  12. python技巧 python2中的除法结果为0
  13. python数据类型之字典(一)
  14. UVa 12099 The Bookcase - 动态规划
  15. bufferedReader中的数据, 只是读过一次, 就没有了(拿走,自然就没了),只能读一次( load, readLine 等只要是读操作)
  16. Python异常和异常处理
  17. php扩展Redis功能
  18. paypal文档
  19. 域名无法解析 Linux临时或永久修改DNS
  20. struts2中struts.xml和web.xml文件解析及工作原理

热门文章

  1. Python爬虫--简单爬取图片
  2. 爬虫6:多页面增量Java爬虫-sina主页
  3. python核心编程学习记录之函数与函数式编程
  4. Web服务端软件的服务品质概要
  5. spring多线程与定时任务
  6. Dynamics AX 2012 R2 在AIF服务契约中使用DateTime
  7. HDU 4280:Island Transport(ISAP模板题)
  8. 【iOS】我的Objective-C学习笔记
  9. MySql数据库-使用cmd操作数据库
  10. linux 修改home目录下的中文目录名为英文