用邻接表方式建立图

//用邻接表表示图
#include <stdio.h>
#include <stdlib.h>

#define DataType char
#define MaxVertexNum 20
#define Vertex int
#define WeightType int
typedef struct GNode *PtrToGNode;
struct  GNode
{
	int Nv;			//顶点数
	int Ne;			//边数
	AdjList G;		//邻接表
};

struct ENode{
	Vertex v1, v2;
	int weight;
};

typedef struct ENode* Edge;

typedef PtrToGNode LGraph;	//以邻接表方式存储的图类型

typedef struct Vnode {
	PtrToAdjVNode FirstEdge;
	DataType Data; //存顶点的数据
}AdjList[MaxVertexNum];

typedef struct AdjVNode *PtrToAdjVNode;
struct AdjVNode {
	Vertex AdjV;			//邻接点下标
	WeightType Weight;		//边的权重
	PtrToAdjVNode Next;		
};

//初始化一个有VertexNum个顶点但没有边的图

LGraph CreateGraph(int VertexNum)
{
	Vertex v;
	LGraph Graph;
	Graph = (LGraph)malloc(sizeof(struct GNode));
	Graph->Nv = VertexNum;
	Graph->Ne = 0;

	for (v = 0; v < Graph->Nv; v++)
		Graph->G[v].FirstEdge = NULL;

	return Graph;
}

void InsertEdged(LGraph Graph, Edge E)
{
	PtrToAdjVNode NewNode;
	NewNode = (PtrToAdjVNode)malloc(sizeof(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(sizeof(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;
}

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值