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

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

//递归实现
#include
#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]<for(int j=0;jif(G.edge[i][j]==1&&mark[j]==0)
            DFS(G,j);
}

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

//测试函数
int main()
{
    create(G);
    DFS_Component(G);
    return 0;
}

你可能感兴趣的:(数据结构学习笔记)