众所周知,图有经典的两种遍历方式:深度优先遍历和广度优先遍历
首先我们就来说说深度优先遍历,其他的不说了,直接上代码,分为递归个非递归的方式啊
首先是递归的方式实现的,比较简单,考虑到存储结构由邻接矩阵和邻接表,有分为两种:一种是邻接矩阵存储的递归,简单点说就是用数组来存储;另一种是邻接表存储的,也就是说用链表的方式存储的
一、递归
1、邻接矩阵:
#include<stdio.h>
#define MAX 100
typedef struct
{
int e[MAX][MAX];
int ves;
int edge;
int book[MAX];//标志判断是否有被访问过
}MGraph;
void createMGraph(MGraph *G)
{
int i;
int j;
int start;
int end;
printf("please input the ves and edge:\n");
scanf("%d %d",&G->ves,&G->edge);
//初始化
for(i = 0; i < G->ves; i++)
{
for(j = 0; j < G->ves; j++)
{
G->e[i][j] = 0;
}
G->book[i] = 0;//没被访问过的结点置为0
}
//创建邻接矩阵
printf("please input the (vi,vj)\n");
for(i = 0; i < G->edge; i++)
{
scanf("%d %d",&start,&end);
G->e[start][end] = 1;
}
}
void dfs(MGraph *G,int ves)
{
int i;
G->book[ves] = 1;//被访问过的结点置为1
printf("%d ",ves);
for(i = 0; i < G->ves; i++)
{
if(G->e[ves][i] != 0 && G->book[i] == 0)
{
dfs(G,i);
}
}
}
int main()
{
MGraph G;
createMGraph(&G);
dfs(&G,0);
return 0;
}
2、邻接表:
#include<stdio.h>
#include<stdlib.h>

本文介绍了图的深度优先遍历算法,包括递归和非递归两种实现方式,并提供了基于邻接矩阵和邻接表的C/C++代码示例。
最低0.47元/天 解锁文章
3070





