博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解救小哈——bfs广搜
阅读量:6595 次
发布时间:2019-06-24

本文共 1572 字,大约阅读时间需要 5 分钟。

  • 问题描述:

小哈去玩迷宫,结果迷路了,小哼去救小哈。迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物。

问题:帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径。(注意:障碍物不能走,小哼也不能走出迷宫外,0表示空地,1表示障碍物)

输入:

5 4

0 0 1 0

0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3

输出:

7

  • 代码:

#include
#include
#define INF 10000000using namespace std;int a[50][50],b[50][50];int next[4][2]={
{
0,1},{
1,0},{
0,-1},{-1,0}};//四个方向struct node//用结构体模拟队列{ int x; int y; int s;//记录步数}que[2505];int main(){ int n,m,sx,sy,ex,ey,tx,ty; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); scanf("%d%d%d%d",&sx,&sy,&ex,&ey); //初始化队列 int head=1; int tail=1; //将起点入队 que[tail].x=sx; que[tail].y=sy; que[tail].s=0; tail++;//队尾指针++,队尾指针要指向空队列 b[sx][sy]=1;//标记起点 int flag=0; //开始广搜 while(head
n||ty>m)//是否越界 { continue; } if(b[tx][ty]==0&&a[tx][ty]==0)//这个点没有走过并且是空地 { b[tx][ty]=1;//标记走过,此处与深搜不同,不能还原标记 //将此点入队 que[tail].x=tx; que[tail].y=ty; que[tail].s=que[head].s+1;//父亲(head)的步数加1 tail++;//队尾指针++ } if(tx==ex&&ty==ey) { flag=1; break;//走到终点 } } if(flag==1) break; head++;//四个方向可以进入路径的都以入队,将head出队 } printf("%d\n",que[tail-1].s);//输出最后一个队列元素的步数,tail指向最后一个元素的下一个位置,所以-1 return 0;}

 

转载于:https://www.cnblogs.com/boboyuzz/p/10417728.html

你可能感兴趣的文章
汕头市队赛 yyl杯1 T1
查看>>
从函数式编程到Ramda函数库(一)
查看>>
ora-1652
查看>>
PL/SQL developer 开发小技能 and ash show command PL/SQL EXECUTE
查看>>
Linux oraenv Tips
查看>>
27-列表解析
查看>>
Java并发--线程安全策略
查看>>
python书籍分类和评语(不断更新)
查看>>
iOS 7用户界面过渡指南
查看>>
ansible变量定义
查看>>
smack 监听不同packet机制
查看>>
用例图
查看>>
“#51CTO学院四周年#互相交流,共同提高!
查看>>
同样是做内容创业,你为什么没有别人赚得多?
查看>>
检查Linux系统日志error和mysql错误日志的脚本
查看>>
高效制冷与自然冷却并重
查看>>
SQL Server 2008 全文搜索的一些知识
查看>>
GUN as 使用
查看>>
一周最新示例代码回顾 (4/16–4/22)
查看>>
TCPDUMP快速入门手册
查看>>