图——邻接矩阵的存储与基本操作

1.邻接矩阵

两个数组分别存储:数据元素(顶点)的信息和数据元素之间的关系(边或弧)的信息。
其形式描述如下:

// ----- 图的数组(邻接矩阵)存储表示 ----- //
// 常量定义
# define INFINITY -1           // 最大权重,表示不邻接关系 
# define MAX_VERTEX_NUM 10     // 最大顶点个数 
typedef int VRType;            // 顶点间的关系类型,如0/1表示邻接否
typedef char InfoType;         // 弧段的信息类型
typedef char VertexType;       // 顶点信息类型
typedef enum {
    DG, DN, UDG, UDN } GraphKind;   // 有向图、有向网、 无向图、无向网 

// 图的邻接矩阵存储结构定义
typedef struct ArcCell {
    // 弧/边的基本结构 
	VRType adj;     // VRType是顶点的关系类型,对无权图用1或0表示是否相邻,对带权图(网)用权值
	InfoType *info; // 该弧段相关信息的指针
}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedef struct {
     // 图的基本结构 
	VertexType vexs[MAX_VERTEX_NUM];  // 顶点向量
	AdjMatrix arcs;                   // 邻接矩阵
	int vexnum, arcnum;                // 当前节点、边二点数目
	GraphKind kind;                   //  图的种类 
}MGraph;
2.图的创建

无向网(带权值的无向图)

//构造无向网UDN
void createUDN(MGraph& G) {
   
	int incInfo; //表示有无弧上信息,0表示弧不含任何信息
	cin >> G.vexnum >> G.arcnum >> incInfo;
	int i, j;
	for (i = 0; i < G.vexnum; i++) cin >> G.vexs[i];   // 输入顶点的信息
	for (i = 0; i < G.vexnum; i++) {
   
		for (j = 0; j < G.vexnum; j++) G.arcs[i][j] = {
    INFINITY,NULL }; // 初始化邻接矩阵
	}
	for (i = 0; i < G.arcnum; i++) {
     // 输入弧v1-v2的信息
		VertexType v1, v2;
		int w;
		cin >> v1 >> v2 >> w;
		int l1 = LocateVex(G, v1);
		int l2 = LocateVex(G, v2);
		G.arcs[l1][l2].adj = w;   // 输入弧上权重信息
		if (incInfo) cin >> *G.arcs[l1][l2].info;  // 若有弧上信息,则输入
		G.arcs[l2][l1] = G.arcs[l1][l2];
	}
}

无向图(不带权值的无向图)

//构建无向图UDG
void createUDG(MGraph& G) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值