第4章第3节-层层递进-广度优先搜索
/*层层递进-广度优先搜索*/
#include "stdio.h"
struct note
{
int x;//横坐标
int y;//纵坐标
int f;//父亲在队列中的编号,本题不要求输出路径,可以不需要f
int s;//步数
};
int main()
{
struct note que[2501];//因为地图大小不超过50*50,因此队列扩展不会超过2500个
int a[51][51] = {0},book[51][51] = {0};
//定义一个用于表示走的方向的数组
int next[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//分别表示向右,向下,向左,向上
int head,tail;
int i,j,k,n,m,startx,starty,p,q,tx,ty,flag;
scanf("%d %d",&n,&m);
for(i = 1;i <= n;i++)
{
for(j = 1;j <= m;j++)
{
scanf("%d",&a[i][j]);
}
}
scanf("%d %d %d %d",&startx,&starty,&p,&q);
//队列初始化
head = 1;
tail = 1;
//往队列插入迷宫坐标
que[tail].x = startx;
que[tail].y = starty;
que[tail].f = 0;
que[tail].s = 0;
tail++;
book[startx][starty] = 1;
flag = 0;//用来标记是否到达目标点,0表示暂时没有到达,1表示到达
//当队列不为空时循环
while(head < tail)
{
//枚举4个方向
for(k = 0;k <= 3;k++)
{
//计算下一个点的坐标
tx = que[head].x + next[k][0];
ty = que[head].y + next[k][1];
//判断是否越界
if(tx < 1 || tx > n || ty < 1 || ty > m)
{
continue;//跳出此次循环
}
//判断是否是障碍物或者已经在路径中
if(a[tx][ty] == 0 && book[tx][ty] == 0)
{
//把这个点标记为已经走过
//注意宽搜每个点只入队列一次,所以和深搜不同,不用将book数组还原
book[tx][ty] = 1;
//插入新的点到队列之中
que[tail].x = tx;
que[tail].y = ty;
que[tail].f = head;//因为这个点是从head扩展出来的,所以他的父亲就是head,本题目不需要求路径,因此本句可省略
que[tail].s = que[head].s + 1;//步数是父亲的步数加1
tail++;
}
//如果到目标点了,停止扩展,任务结束,退出循环
if(tx == p && ty == q)
{
//注意下面两句话千万不要写颠倒了
flag = 1;
break;
}
}
if(flag == 1)
{
break;
}
head++;//全部出列,注意这地方千万不要忘记,当一个点扩展结束后,head++才能对后面的点再进行扩展
}
//打印队列中末尾最后一个点(目标点)的步数
//注意tail指向的是队列队尾(即最后一为)的下一个位置,所以这里需要-1
printf("%d\n",que[tail - 1].s );
getchar();getchar();
return 0;
}
/*********
示例输入:
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
************/
第4章第3节-层层递进-广度优先搜索相关推荐
- 算法简介:层层递进----广度优先搜索(BFS)
算法简介:层层递进----广度优先搜索(BFS) 算法简介 算法简介 BFS算法思想: 首先以一个未被访问过的顶点作为起始顶点,访问其所有相邻的顶点,然后对每个相邻的顶点,再访问它们相邻的未被访问过的 ...
- 层层递进-广度优先搜索
从题目可以看出,广度优先搜索是一层一层的搜索,而深搜是一根筋,一直搜到底O(∩_∩)O哈哈~. 到底怎么实现广搜呢?深搜是递归,想必大家可能恨死递归了.广搜不用递归,就用循环和队列就够! 这个题目,从 ...
- [C] 层层递进——C语言实现广度优先搜索
以防万一有人想不开要做染色的题呢?比如我. 广度优先搜索 如何实现一个广度优先搜索 广搜(bfs)是一个层层递进的概念,与深搜的不撞南墙不回头不同,广搜更像一个感染的过程,一个点只能感染到它周边的点. ...
- C++两个函数可以相互递归吗_[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进
[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...
- [算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进
[算法系列] 搞懂递归, 看这篇就够了 !! 递归设计思路 + 经典例题层层递进 从学习写代码伊始, 总有个坎不好迈过去, 那就是遇上一些有关递归的东西时, 看着简短的代码, 怎么稀里糊涂就出来了. ...
- 《UML面向对象设计基础》—第1章1.2节信息/实现隐藏
本节书摘来自异步社区<UML面向对象设计基础>一书中的第1章1.2节信息/实现隐藏,作者[美]Meliir Page-Jones,更多章节内容可以访问云栖社区"异步社区" ...
- 《敏捷迭代开发:管理者指南》—第2章2.5节渐进开发和自适应开发
本节书摘来自异步社区<敏捷迭代开发:管理者指南>一书中的第2章2.5节渐进开发和自适应开发,作者[美]Craig Larman,更多章节内容可以访问云栖社区"异步社区" ...
- 《实现模式(修订版)》—第1章1.2节那么,现在……
本节书摘来自异步社区<实现模式(修订版)>一书中的第1章1.2节那么,现在--,作者[美]Kent Beck,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1. ...
- 《Adobe Acrobat DC经典教程》—第1章1.11节在阅读模式下查看PDF文件
本节书摘来自异步社区<Adobe Acrobat DC经典教程>一书中的第1章1.11节在阅读模式下查看PDF文件,作者[美]Lisa Fridsma(丽莎 弗里斯玛) , Brie Gy ...
最新文章
- [翻译完成] Pi+Raspbian+CGMiner+TightVNC+WIFI五合一矿机超级教程
- 人工智能(Artificial Intelligence)常用算法
- 前方高能 | 容器化应用操作原来可以这样简单
- js常用事件整理—兼容所有浏览器
- WxWidgets :一些古怪的源代码
- php函数删除非空目录,删除文件夹(非空目录)及其中所有文件的思路及源代码
- pytorch教程龙曲良26-30
- 【OJ】洛谷字符串题单题解锦集
- 玩转华为云开发|老板万万没想到:刚入职的我一人就搞定人脸识别开发
- 充电枪cp信号控制板_新能源汽车充电头气密性检测是怎么做的呢?
- CISCO3560 VLAN配置实例
- 查找算法之四 斐波那契查找(C++版本)
- ultilize什么意思_utilize是什么意思_utilize在线翻译_读音_用法_例句_含义-查字典网...
- archlinux 分区
- Element UI 的日历控件,并在日期中做标注
- 二极管的三种击穿形式
- C1认证学习十四、十五(算法常识、HTML Head 头)
- 正负数排列(用链表和数组实现)
- 计算机三级网络技术分值占比,全国计算机等级考试三级考试题型及分值比例
- 浙江大学软件学院2020年保研上机模拟练习
热门文章
- 【专业选择】想选择 IT 相关专业?那么就要先详细了解 IT 行业!
- CAD二次开发--如何获取图面“组”对象及其内部实体(以南方CASS居民地-房屋为例)
- 【23招实用技巧让XP运行更快捷更可靠】
- 乐山持点电商:抖音商家群聊群直播通知使用指南
- 每日五题-202202
- 苹果a13_iPhone11大降800元,苹果A13+256GB,库克还是清仓了
- 12事务与并发控制(数据库原理)
- 基于巨杉数据库的银行流水查询系统
- 去除面部黑色素小妙招_如何去脸上色素斑小妙招?教你快速祛除色斑沉着的方法...
- 巧记口诀确定正方体表面展开图