邻接矩阵表示

【1】邻接矩阵的存储表示

邻接矩阵是最简单、最直观的图形结构,适用于稠密图。对于一个顶点数为n的无向图,其邻接矩阵为一个n * n的方阵M,若i和j之间存在一条边,即从i到j有一条边或从j到i有一条边,则M[i][j]=1;否则M[i][j]=0。

若该无向图是一个网,即边带权,则在矩阵中相应位置记录边权值。

【2】邻接矩阵的算法描述

(1)初始化邻接矩阵为全0,若无向图为带权图,则将对角线元素初始化为∞。

(2)读取每个节点及其相邻节点的信息,并根据节点编号在邻接矩阵中标记对应位置为1或者对应位置写入边的权值。对于无向图,需要对称地在邻接矩阵中标记另一条边,即如果(i, j)是一条边,则(j, i)也是一条边。

(3)输出邻接矩阵即可。

#include <stdio.h>
#include <stdlib.h>
#define MaxVertexNum 100     // 最大顶点数
#define INFINITY 65535       // 初始定义为"无限大"
typedef int Vertex;          // 用顶点下标表示顶点,为整型
typedef int WeightType;      // 边的权值设为整型 
typedef char DataType;       // 顶点存储的数据类型为字符型

typedef struct GNode * PtrToGNode;
struct GNode{
    int Nv;        // 顶点数
    int Ne;        // 边数   
    WeightType G[MaxVertexNum][MaxVertexNum]; // 邻接矩阵
    DataType Data[MaxVertexNum];             // 存顶点的数据,字符型
};
typedef PtrToGNode MGraph; // 以邻接矩阵存储的图类型
// 初始化一个有VertexNum个顶点但没有边的图
MGraph CreateGraph( int VertexNum )
{ /* 注意:这里默认顶点编号从0开始 */
    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] = INFINITY;
    return Graph; 
}
// 插入边
void InsertEdge( MGraph Graph, Vertex V1, Vertex V2, WeightType Weight )
{
     /* 插入边 <V1, V2> */
     Graph->G[V1][V2] = Weight;    
     /* 若为无向图,还需插入边<V2, V1> */
     Graph->G[V2][V1] = Weight;
}

其中, Graph->G[V1][V2] 为顶点V1和V2之间的边的权值,若为无向网,则还需要将 Graph->G[V2][V1] 设为相同值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值