数据结构学习笔记(四) 图之邻接矩阵实现深度优先遍历

以下是用邻接矩阵存储表示,实现图的深度优先遍历的示例。
用于遍历的有向图如下:
《数据结构学习笔记(四) 图之邻接矩阵实现深度优先遍历》

//递归实现
#include<iostream>
#define MaxVertexNum 6
using namespace std;
//抽象数据类型
typedef char vertextype;//顶点类型
typedef int edgetype;//边的权值
typedef struct
{
    vertextype vex[MaxVertexNum];//顶点表
    edgetype edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,也即边表
    int n;//顶点的个数
}AMGraph;
AMGraph G;

//构造标志数组
int mark[MaxVertexNum];

//构造邻接矩阵
void create(AMGraph &G)
{
    G.n=6;
    char x[6]={'a','b','c','d','e','f'};
    for(int i=0;i<6;i++)
        G.vex[i]=x[i];
    for(int i=0;i<6;i++)
        mark[i]=0;
    int c[6][6]={{0,1,0,0,1,1},{0,0,0,0,0,1},{0,1,0,0,0,0},{0,0,1,0,0,0},{0,0,0,1,0,1},{0,0,1,1,0,0}};
    for(int i=0;i<6;i++)
        for(int j=0;j<6;j++)
            G.edge[i][j]=c[i][j];
}

//图的深度优先遍历
void DFS(AMGraph &G,int i)
{
    mark[i]=1;
    cout<<(char)G.vex[i]<<endl;
    for(int j=0;j<G.n;j++)
        if(G.edge[i][j]==1&&mark[j]==0)
            DFS(G,j);
}

//深度优先遍历图的算法
void DFS_Component(AMGraph &G)
{
    int i;
    for(i=0;i<G.n;i++)
        if(mark[i]==0)
            DFS(G,i);
}

//测试函数
int main()
{
    create(G);
    DFS_Component(G);
    return 0;
}
    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/Clementina_123/article/details/79204071
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞