以下是用邻接矩阵存储表示,实现图的深度优先遍历的示例。
用于遍历的有向图如下:
//递归实现
#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;
}