模板:DFS
#include <iostream>
using namespace std;
#define MAX 10
typedef int VertexType;/*顶点类型*/
typedef int EdgeType;/*边类型*/
typedef struct{
VertexType vexs[MAX];/*顶点表*/
EdgeType arcs[MAX][MAX];/*邻接矩阵,边表*/
int numVertexs, numEdges;/*顶点与边的数量*/
}MGraph;
void CreateMGraph(MGraph *G)
{
/*读入顶点信息*/
G->numVertexs = 4;
G->numEdges = 4;
G->vexs[0] = 'A';
G->vexs[1] = 'B';
G->vexs[2] = 'C';
G->vexs[3] = 'D';
/*初始化图*/
for (int i = 1; i <= G->numVertexs; i++)
{
for (int j = 0; j <= G->numVertexs; j++)
{
G->arcs[i][j] = 0;
}
}
G->arcs[0][1] = 1;
G->arcs[1][2] = 1;
G->arcs[2][3] = 1;
G->arcs[3][0] = 1;
}
int visited[MAX];
void DFS(MGraph G,int i)
{
int j;
visited[i] = true;
printf("%c ", G.vexs[i]);/*代表访问*/
for (j = 0; j < G.numVertexs; j++)
{
if (G.arcs[i][j] == 1 && !visited[j])/*对邻接顶点递归调用*/
{
DFS(G, j);
}
}
}
void DFSTraverse(MGraph G)
{
int i;
/*初始所有顶点都是未访问状态*/
for (i = 0; i < G.numVertexs; i++)
{
visited[i] = 0;
}
for (i = 0; i < G.numVertexs; i++)
{
if (!visited[i]) /*对所有未访问过的顶点调用DFS,若是连通图则只会访问一次*/
{
DFS(G,i);
}
}
}
int main()
{
MGraph G;
CreateMGraph(&G);
printf("深度优先遍历:\n");
DFSTraverse(G);
return 0;
}