首先介绍一下两个算法是怎样运行的。
深度优先遍历(DFS): 深度优先遍历是一种递归的算法,它从图的某个节点开始,先访问该节点,再递归地访问该节点的相邻节点。深度优先遍历的核心思想是“先入后出”,即先访问到一个节点,就把该节点的所有相邻节点都压入一个栈中,然后再按照“后进先出”的原则依次访问栈中的节点,直到遍历完所有节点。
广度优先遍历(BFS): 广度优先遍历是一种基于队列实现的算法,它从图的某个节点开始,先访问该节点,再将该节点的所有相邻节点加入节点队列中。接着从队列头部取出一个节点,访问该节点,并将该节点的所有相邻节点加入队列中,重复上述过程,直到遍历完所有节点。
对于首次接触图的小白来说,一整套可以运行的,解析详细的代码是十分必要的, 下面提供一个整套的可运行的代码,附带详细的注释,希望你能看懂。
#include <stdio.h>
#include <stdlib.h>
#define MaxV 100
//边节点
typedef struct Arc
{
int adjvex; //邻接边所指向的顶点
struct Arc* next; //指向下一个邻接边
int weight; //边的权重信息(方便后面最短路径和最小生成树的算法执行)
} Arc;
//顶点节点
typedef struct Vex
{
int data; //顶点的编号
struct Arc* firstArc; //指向第一条邻接的边
} Vex, AdjList[MaxV]; //定义这个结构体叫Vex,一个元素为这个结构体