//对于非连通图,每个连通分量中的顶点集,和遍历时走过的边一起构成若干棵生成树,
//这些连通分量的生成树组成非连通图的生成森林。
//以孩子兄弟链表作为生成森林的存储结构,以下算法生成非连通图的深度优先生成森林。
//算法的时间复杂度为遍历算法相同.
#include <stdio.h>
#include <stdlib.h>
#define MAX 20
typedef char ElemType;
typedef enum {FALSE,TRUE} Boolean;
typedef int Status;
Boolean visited[MAX];
//邻接表结构表示的图
#include <limits.h>
#define MAX_VERTEX_NUM 20
#define OK 1
#define ERROR 0
typedef int InfoType; //定义弧相关信息为整形
typedef char VertexType; //定义顶点类型为字符型
typedef struct ArcNode
{
int adjvex; //该弧所指向的顶点在顺序结构中的位置
struct ArcNode *nextarc; //与该弧邻接(同一尾结点)的下一条弧的指针
InfoType *info; //该弧相关信息的指针
}ArcNode; //弧结构
typedef struct VNode
{
VertexType data; //顶点
ArcNode *firstarc; //指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX_VERTEX_NUM]; //顶点结构
typedef struct
{
AdjList vertices; //顶点数组
int vexnum,arcnum; //顶点数和弧数
}ALGraph; //邻接表表示的图结构
//树结构:孩子兄弟链
typedef struct CSNode
{
ElemType data;
struct CSNode *firstchild,*nextsibling;
}CSNode,*CSTree;
Status CreateUDG(ALGraph *G);
void DFSForest(ALGraph G,CSTree *T);
void DFSTree(ALGraph G,int v,CSTree *t);
int LocateVex(ALGraph G,VertexType v);
void CSTreeTraverse(CSTree T);
int FirstAdjVex(ALGrap
无向图的生成树和生成森林---孩子兄弟链表表示法
最新推荐文章于 2024-06-05 16:53:21 发布