深度优先搜索(DFS)和广度优先搜索(BFS)探究
附BFS解题代码:
#include<iostream>
#include<queue>
using namespace std;char room[23][23];
int dir[4][2] =
{{-1,0}, //向左。左上角坐标是(0, 0){0,-1}, //向上{1,0}, //向右{0,1} //向下
};
int Wx, Hy, num,num_times=0; //Wx行,Hy列。用num统计可走的位置有多少,num_times记录搜索次数
#define CHECK(x, y) (x<Wx && x>=0 && y >=0 && y<Hy) //是否在room里
struct node
{int x,y;
};//坐标点void BFS(int dx,int dy)
{num=1; //起点也包含在砖块内queue <node> q; //队列中放坐标点(结构体)node start, next; //缺省初始化一个起点和下一个点(结构体)start.x = dx; //给起点坐标赋值start.y = dy;q.push(start); //把赋值后的起点压入队列中while(!q.empty()) //如果队列不为空{start = q.front();//每一次都把队列头部作为起点,起点一直都在变化q.pop();//每一次都要把起点从头移除//cout<<"out"<<start.x<<start.y<<endl; //打印出队列情况,进行验证for(int i=0; i<4; i++) //按左、上、右、下,4个方向顺时针逐一搜索{next.x = start.x + dir[i][0];next.y = start.y + dir[i][1];if(CHECK(next.x,next.y) && room[next.x][next.y]=='.'){room[next.x][next.y]='#';//进队之后,标记为已经处理过,即已经走过的瓷砖下一次不能再走num++;q.push(next);//从尾插入for (int n = 0; n < Hy; n++) //有Hy列{for (int m = 0; m < Wx; m++) //一次读入一行{cout<<room[m][n];//把每次搜索完毕的瓷砖状态打印出来}cout<<endl;}num_times++;cout<<"第"<<num_times<<"次搜索完毕"<<endl;}}}
}int main()
{int x, y, dx, dy;while (cin >> Wx >> Hy){if (Wx==0 && Hy==0)break;for (y = 0; y < Hy; y++) //有Hy列{for (x = 0; x < Wx; x++) //一次读入一行{cin >> room[x][y];if(room[x][y] == '@') //读入起点{dx = x;dy = y;}}}cout<<endl;num = 0;BFS(dx, dy);cout << num << endl;}return 0;
}
输入:
运行结果:
深度优先搜索(DFS)和广度优先搜索(BFS)探究相关推荐
- 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)
目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...
- 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- 图的深度优先搜索(DFS)和广度优先搜索(BFS)算法
深度优先(DFS) 深度优先遍历,从初始访问结点出发,我们知道初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接 ...
- 【蓝桥杯】2015决赛A组 5 穿越雷区(深度优先搜索dfs、广度优先搜索bfs)
历届试题 穿越雷区 问题描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征), ...
- 树的前序、中序、后序遍历及深度优先算法DFS、广度优先算法BFS及python实现
刷Leetcode时遇到一种经典数据结构--树,树是典型递归思想来的,学习树有助于学习递归思想以及栈.队列(后续细说),本文对树的结构.遍历算法以及Python实现做总结,以供复习拓展 树是连通的无环 ...
- 【数据结构与算法】2.深度优先搜索DFS、广度优先搜索BFS
原文链接:https://blog.csdn.net/qq_41681241/article/details/81432634 总结 一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的 ...
- 图的遍历(深度优先遍历DFS,广度优先遍历BFS)以及C语言的实现
遍历的定义: 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算. 一:深度优先遍历(DFS) 1,在访问图中某一起始顶点V后,由V ...
- 数据结构-图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
https://www.cnblogs.com/qzhc/p/10291430.html 最后一个广度优先有错误,H不指向E,只有G指向E,所以顺序应该是ABCFDHGE
- 深度优先搜索遍历与广度优先搜索遍历
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 深度优先 ...
最新文章
- 2022-2028年中国铁路信息化建设投资分析及前景预测报告
- 机器学习中的一些概念
- Linux Kernel TCP/IP Stack — L1 Layer — NIC Controller — NAPI
- asp.net模版页面的高级应用
- Win8.1 查看 “Windows 体验指数“
- Android之解决NestedScrollView嵌套RecyclerView部分手机返回到这个页面Recyclerview顶部,而不是页面NestedScrollView顶部
- linux获取tomcat进程,Shell 获取Tomcat进程号
- [vue] vue的is这个特性你有用过吗?主要用在哪些方面?
- 农历php,PHP农历公历转换
- Spring2..5整合Ehacahe
- 工作流的节点关系详解
- 关于使用cadence建pad
- JBOSS 5.0.0GA的集群搭建
- 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。...
- RabbitMQ之Exchange Direct模式
- Parallel垃圾回收器总结
- windows下如何制作和应用数字签名证书 全流程
- 微单相机和单反相机的区别?摄影入门第一课
- PCAN-View如何保存报文?
- 如何用LaTeX写简历
热门文章
- 判断本地和云端通讯录是否一致
- Volley源码学习3--log类
- 哈夫曼编解码器C语言可运行
- html界面左侧没有顶格,求解,html页面顶部有空白??
- [******] 堆排序
- 《Linux内核设计与实现》 第八周读书笔记 第四章 进程调度
- [bzoj1700]: [Usaco2007 Jan]Problem Solving 解题
- typescript索引类型_复杂场景下的 typescript 类型锚定 (1) ----- 对象索引提取-阿里云开发者社区...
- irule jar包无法导入_poi表格的导入导出
- 记事本可以编辑html语言吗,笔记本win7系统使用记事本编辑和运行html代码的方法...