数据结构——DFS、BFS思路与对比

  1. 概念:
    DFS:
    深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。

    BFS:
    宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。

  2. 思路

DFS:从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就回溯到上一个节点,然后从另一条路开始走到底。

在这里插入图片描述

  1. 对比

    深度优先搜索用栈(stack)来实现,整个过程可以想象成一个倒立的树形:
    1、把根节点压入栈中。
    2、每次从栈中弹出一个元素,搜索所有在它下一级的元素,把这些元素压入 栈中。并把这个元素记为它下一级元素的前驱。
    3、找到所要找的元素时结束程序。
    4、如果遍历整个树还没有找到,结束程序。
    广度优先搜索使用队列(queue)来实现,整个过程也可以看做一个倒立的树形:
    1、把根节点放到队列的末尾。
    2、每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把它 们放到队列的末尾。并把这个元素记为它下一级元素的前驱。
    3、找到所要找的元素时结束程序。
    4、如果遍历整个树还没有找到,结束程序。

  2. 例题:
    4.1DFS:图的按录入顺序深度优先搜索(1068)
    题目描述:

图的深度优先搜索类似于树的先根遍历,即从某个结点开始,先访问该结点,然后深度访问该结点的第一棵子树,依次为第二顶子树。如此进行下去,直到所有的结点都访问为止。在该题中,假定所有的结点以“A”至“Z”中的若干字符表示,且要求结点的访问顺序根据录入的顺序进行访问。如果结点录入的顺序为HUEAK,从H开始进行深度优先搜索,则可能的搜索结果为:H->A->K->U>E.

输入

第一行为一个整数n,表示顶点的个数,第二行为n个大写字母构成的字符串,表示顶点,接下来是为一个n*n大小的整数矩阵,表示图的邻接关系。数字为0表示不邻接,否则为相应的边的长度。最后一行为一个字符,表示要求进行深度优先搜索的起始顶点。

输出

用一行输出深度优先搜索结果,起始点为给定的顶点。

样例输入

5
HUEAK
0 0 2 3 0
0 0 0 7 4
2 0 0 0 0
3 7 0 0 1
0 4 0 1 0
H

样例输出

HEAUK

#include<iostream>
#include<string.h>
using namespace std;
int n;
int num[100][100], flag[20] = { 0 };
char ch[50];
void DFS(int y)
{
	int i;
	cout << ch[y];
	flag[y] = 1;
	for (i = 0; i < n; i++) {
		if (flag[i] == 0 && num[y][i] != 0) {
			DFS(i);
		}
	}
}
int main()
{
	cin >> n;
	int i, j;
	char m;
	for (i = 0; i < n; i++) {
		cin >> ch[i];
	}
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			cin >> num[i][j];
		}
	}
	cin >> m;
	for (i = 0; i < n; i++) {
		if (ch[i] == m) {
			DFS(i);
		}
	}
}

4.2 BFS:图的按录入顺序广度优先搜索(1069)

题目描述:

图的广度优先搜索类似于树的按层次遍历,即从某个结点开始,先访问该结点,然后访问该结点的所有邻接点,再依次访问各邻接点的邻接点。如此进行下去,直到所有的结点都访问为止。在该题中,假定所有的结点以“A”–“Z”中的若干字符表示,且要求点的访问顺序根据录入的顺序进行访问。如果结点录入的顺序为HUEAK,要求从H开始进行广度优先搜索,则可能的搜索结果为:H->E->A->U->K.

输入

第一行为一个整数n,表示顶点的个数,第二行为n个大写字母构成的字符串,表示顶点,
接下来是为一个n*n大小的整数矩阵,表示图的邻接关系。数字为0表示不邻接,否则为相
应的边的长度。最后一行为一个字符,表示要求进行广度优先搜索的起始顶点。

输出

用一行输出广度优先搜索结果,起始点为给定的顶点。

样例输入

5
HUEAK
0 0 2 3 0
0 0 0 7 4
2 0 0 0 0
3 7 0 0 1
0 4 0 1 0
H

样例输出

HEAUK

代码

#include<iostream>
using namespace std;
int n;
int num[100][100], flag[20] = { 0 },tou=0,wei=0,dui[100];
char ch[50];
void BFS(int y)
{
	int i;
	dui[wei] = y;
	wei++;
	cout << ch[y];
	flag[y] = 1;
	while (tou != wei) {
		for (i = 0; i < n; i++) {
			if (flag[i] == 0 && num[dui[tou]][i] != 0) {
				cout << ch[i];
				flag[i] = 1;
				dui[wei] = i;
				wei++;
		    }
	    }
		tou++;
	}
}
int main()
{
	cin >> n;
	int i, j;
	char m;
	for (i = 0; i < n; i++) {
		cin >> ch[i];
	}
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			cin >> num[i][j];
		}
	}
	cin >> m;
	for (i = 0; i < n; i++) {
		if (ch[i] == m) {
			BFS(i);
		}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
	}
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值