__3.5.2 深度优先遍历邻接表

#include "pch.h"
#include "__0 Basic_operation.h"
#include <iostream>
#include <vector>

vector<bool> visited;	//访问标志的数组

/*邻接矩阵的深度优先递归算法*/
void DFS(const GraphAdjList& G, int i) {
	visited[i] = true;
	std::cout << G.adjlist[i].data << " ";		//访问顶点信息

	EdgeNode* p = G.adjlist[i].firstEdge;
	while (p) {
		if (!visited[p->adjvex])
			DFS(G, p->adjvex);		//对未访问的邻接顶点递归调用
		p = p->next;
	}
}

/*邻接矩阵的深度遍历操作*/
void DFSTraverse(const GraphAdjList& G) {
	visited.resize(G.numVertexes);		//设置标志数组大小
	for (int i = 0; i < G.numVertexes; ++i)		//初始化所有顶点都是未访问过状态
		visited[i] = false;
	for (int i = 0; i < G.numVertexes; ++i) {
		if (!visited[i])
			DFS(G, i);
	}
}


int main() {
	/*  P242无向图				 0  1  2  3  4  5  6  7  8  */
	vector<vector<EdgeType>> vv{ {0, 1, N, N, N, 1, N, N, N},
								 {1, 0, 1, N, N, N, 1, N, 1},
								 {N, 1, 0, 1, N, N, N, N, 1},
								 {N, N, 1, 0, 1, N, 1, 1, 1},
								 {N, N, N, 1, 0, 1, N, 1, N},
								 {1, N, N, N, 1, 0, 1, N, N},
								 {N, 1, N, 1, N, 1, 0, 1, N},
								 {N, N, N, 1, 1, N, 1, 0, N},
								 {N, 1, 1, 1, N, N, N, N, 0} };
	MGraph G;
	CreateMGraphByArray(G, vv, 0);	//传入 0 表示无向图
	GraphAdjList GL;
	CreateAdjListByMGraph(GL, G);
	ShowAdjList(GL);
	std::cout << "\n深度优先遍历结果:";
	DFSTraverse(GL);
	std::cout << std::endl << std::endl;

	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40843865/article/details/89225024