#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;
}
__3.5.2 深度优先遍历邻接表
猜你喜欢
转载自blog.csdn.net/qq_40843865/article/details/89225024
今日推荐
周排行