当图为稀疏图时,使用邻接矩阵就会浪费很大的存储空间。
这时,图的邻接表法就派上用场了,大大减少了不必要的浪费,
并且可以更方便地增删边。
下面附上图的邻接表实现代码,以及在此基础上的DFS.
/*图的邻接表+深度优先遍历(DFS)(顶点表中顶点序号从0开始)*/
/*注意顶点序号从0开始,如果不注意可能出现越界的错误*/
#include<stdio.h>
#include<stdlib.h>
#define MaxVertexNum 100
typedef int VertexType;
typedef struct ArcNode{ //边表结点
int adjvex; //该弧所指向的顶点的位置序号
struct ArcNode *next; //指向下一条弧的指针
int weight; //边上的权值
}ArcNode;
typedef struct VNode{ //顶点表结点
VertexType data; //顶点信息
ArcNode *first; //指向第一条依附该顶点的弧的指针
}VNode,AdjList[MaxVertexNum];
typedef struct{
AdjList vertices; //邻接表
int vexnum, arcnum; //图的顶点数和弧数
}ALGraph; //ALGraph是以邻接表存储的图类型
int visited[MaxVertexNum];
void CreateALGraph(ALGraph *G); //创建图
void OutputALGraph(ALGraph G); //打印邻接表
void Visit(ALGraph G,int v); //访问顶点
int FirstNeighbor(ALGraph G,int v); //v的第一个邻接