《算法导论》BFS和DFS

说明:

BFS的图来自《算法导论》22-2;

DFS的图来自《算法导论》22-4;

C++11代码如下:

一、BFS

《算法导论》BFS和DFS_第1张图片

#include 
#include 
#include 
#include 
using namespace std;

struct V				//顶点
{
	int parent = -1;
	int distance = -1;
}v[6];

queue que;
vector> G = {{1,3},{4},{5,4},{1},{3},{5}};		//邻接链表

void print(int node)			//打印到结点node的路径
{
	if (node == 0)
		cout << "0 ";
	else if(v[node].parent == -1)
	{
		cout<<"No way";
		return;
	}
	else
	{
		print(v[node].parent);
		cout<

二、DFS

《算法导论》BFS和DFS_第2张图片

#include 
#include 
#include 
using namespace std;

struct Node
{
	int discover = 0,finish = 0;
	int parent = -1;
} node[6];

vector> G = {{1,3},{4},{4,5},{1},{3},{5}};		//邻接链表 
int time = 0;

void DFS(int i)
{
	for(auto p : G[i])					//搜索结点i的所有相邻结点 
	{
		if(node[p].parent == -1)		//找到一个白色结点,处理好其信息后就递归下去 
		{
			++time;
			node[p].discover = time;
			node[p].parent = i;
			DFS(p);
		}
	}
	++time;
	node[i].finish = time;				//邻接链表扫描完的时间 
}

void print(int i)						//打印信息 
{
	cout<<"node: "<


你可能感兴趣的:(算法导论)