数据结构与算法导论(C++)连载(八)--图(邻接矩阵存储和链式邻接表存储)

本文介绍了图的概念,包括其顶点、边和权重,并探讨了如何使用C++来实现图的两种存储方式:邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。通过邻接矩阵和邻接表,可以有效地表示和操作多对多的关系。文章还提到了在广度优先搜索中使用队列的重要性,并提供了相关代码实现及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图-表示多对多的关系,一组顶点V(一个非空有限顶点集合),一组边E(一个有限边集合),边上有权重称为网络。用邻接矩阵(稠密图)或者邻接表(稀疏图)表示一个图。

一、邻接矩阵表示:

在Graph_M.h中:

#include"iostream"

using namespace std;

/******************邻接矩阵表示图**************************/

#define MaxVertexNum 128
#define WeightType int
typedef int Vertex;
typedef struct GNode *PtrToGNode;
struct GNode {
int Nv; //顶点数
int Ne; //边数
WeightType G[MaxVertexNum][MaxVertexNum]; //存储顶点的数据
};
typedef PtrToGNode MGraph;

typedef struct ENode *PtrToENode;
struct ENode
{
Vertex V1, V2; //有向边<V1,V2>
WeightType Weight; //权重
};
typedef PtrToENode Edge;

MGraph CreateGraph(int VertexNum);
void InsertEdge(MGraph Graph, Edge E);
MGraph BuildGraph();
void OutputGraph(MGraph Graph);

在Graph_M.cpp中:

#include"Graph_M.h"

/******************邻接矩阵表示图**************************/

MGraph CreateGraph(int VertexNum)
{
	Vertex V, W;
	MGraph Graph;
	Graph = (MGraph)malloc(sizeof(struct GNode));
	Graph->Nv = VertexNum;
	Graph->Ne = 0;

	for (V = 0; V < Graph->Nv; V++)
		for (W = 0; W < Graph->Nv; W++)
			Graph->G[V][W] = 0;
	return Graph;
}

void InsertEdge(MGraph Graph, Edge E)
{
	Graph->G[E->V1][E->V2] = E->Weight;
	/*若是无向图,还要插入边<V2,V1>*/
	Graph->G[E->V2][E->V1] = E->Weight;
}

MGraph BuildGraph()
{
	MGraph Graph; Edge E;
	Vertex V; int Nv, i;
	cout << "Input Nv:\n"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值