用邻接表来表示图

typedef struct GNode *PtrToGNode;
struct GNode{ 
	int Nv;//顶点数 
	int Ne;//边数 
	AdjList G;//邻接表。AdjList要自己去定义 
};
typedef PtrToGNode LGraph;//以邻接表存储的图类型
typedef struct VNode{
	PtrToAdjVNode FirstEdge; 
	DataType Data;//存顶点的数据 
}AdjList[MaxVertexNum]; 
//AdjList是邻接表类型 
typedef struct AdjVNode *PtrToAdjVNode;
struct AdjVNode{//这个链表里代表每一个边的这个结点的结构体 
	Vertex AdjV;//邻接点下标
	WeightType Weight;//边权重 
	PtrToAdjVNode Next; 
}; 
typedef int Vertex;//用顶点下标表示顶点,为整型 
LGraph CreateGraph(int VertexNum)//建立图的过程。一.初始化LGraph一个有VertexNum(整数)个顶点但没有边的图 
{	Vertex V,W;//定义为顶点类型,就是整型 ,虽都是整型,这里V,W是两个顶点,不是两个整数 
	LGraph Graph;
//什么叫没有边,把这个邻接矩阵任意一对顶点V,W之间边定义为0
//或如果是有权图,把它初始化为INFINITY(很大的数代表无穷大),代表有权图没有边 
	Graph=(LGraph)malloc(sizeof(struct GNode));
	Graph->Nv=VertexNum;
	Graph->Ne=0;
	//注意这里默认顶点编号从0开始,到(Graph->Nv-1)
	for(V=0;V<Graph->Nv;V++)   
		Graph->G[V].FirstEdge=NULL;
	return Graph; 
} 
void InsertEdge(LGraph Graph,Edge E)//二.向LGraph中插入一条边。首先有条边。那边的类型如何定义 
{//插入边过程是把顶点插入链表过程 
	PtrToAdjVNode NewNode;
/*******************插入边<v1,v2>*********************/ 
/*为V2建立新的邻接点*/
NewNode=(PtrToAdjVNode)malloc(sieof(struct AdjVNode));
NewNode->AdjV=E->V2;
NewNode->Weight=E->Weight; 
//将v2插入v1的表头
NewNode->Next=Graph->G[E->V1].FirstEdge;
Graph->G[E->V1].FirstEdge=NewNode; 
/*******************若是无向图,还要插入边<v2,v1>*********************/ 
/*为V1建立新的邻接点*/
NewNode=(PtrToAdjVNode)malloc(sieof(struct AdjVNode));
NewNode->AdjV=E->V1;
NewNode->Weight=E->Weight; 
//将v1插入v2的表头
NewNode->Next=Graph->G[E->V2].FirstEdge;
Graph->G[E->V2].FirstEdge=NewNode; 
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值