递归深度优先遍历
#include<stdio.h>
#include<malloc.h>
#define MAXV 100
#define INF 32767
typedef struct ANode
{
int adjvex;
int weight;
struct ANode *nextarc;
} ArcNode;
typedef struct
{
int count;
ArcNode *firstarc;
} VNode;
typedef struct
{
VNode adjlist[MAXV];
int n, e;
}AdjGraph;
int visit[MAXV] = { 0 };
void CreateAdj(AdjGraph* &G, int A[MAXV][MAXV], int n, int e);
void DFS(AdjGraph *G, int v);
int main()
{
AdjGraph * G;
int n = 6, e = 10;
int A[MAXV][MAXV] = { { 0, 5, INF, 7, INF, INF },
{ INF, 0, 4, INF, INF, INF },{ 8, INF, 0, INF, INF, 9 },
{ INF, INF, 5, 0, 5 },{ INF, INF, INF, 5, 0, INF },{ 3, INF, INF, INF, 1, 0 } };
CreateAdj(G, A, n, e);
printf("从0开始的DFS算法: ");
DFS(G, 0);
printf("\n");
return 0;
}
void DFS(AdjGraph *G, int v) //递归深度优先遍历算法
{
ArcNode *p;
printf("%d ", v);
visit[v] = 1;
p = G->adjlist[v].firstarc;
while (p != NULL)
{
if (visit[p->adjvex] == 0)
DFS(G, p->adjvex);
p = p->nextarc;
}
}
void CreateAdj(AdjGraph* &G, int A[MAXV][MAXV], int n, int e) //创建图的邻接表
{
ArcNode *p;
G = (AdjGraph*)malloc(sizeof(AdjGraph));
for (int i = 0; i < n; ++i)
G->adjlist[i].firstarc = NULL;
for (int i = 0; i < n; ++i)
for (int j = n - 1; j >= 0; --j)
if (A[i][j] != 0 && A[i][j] != INF)
{
p = (ArcNode *)malloc(sizeof(ArcNode));
p->weight = A[i][j];
p->adjvex = j;
p->nextarc = G->adjlist[i].firstarc;
G->adjlist[i].firstarc = p;
}
G->n = n;
G->e = e;
}
运行结果: