数据结构:图的存储结构之邻接矩阵「建议收藏」

数据结构:图的存储结构之邻接矩阵「建议收藏」图的邻接矩阵(AdjacencyMatrix)存储方式是用两个数组来表示图。一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:我们来看一个实例,图7-4-2的左图就是一个无向图。我们再来看一个有向图样例,如图7-4-3所示的左图。在图的术语中,我们提到了网的概念,也就

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维的数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。

设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:

数据结构:图的存储结构之邻接矩阵「建议收藏」

我们来看一个实例,图7-4-2的左图就是一个无向图。

数据结构:图的存储结构之邻接矩阵「建议收藏」

我们再来看一个有向图样例,如图7-4-3所示的左图。

数据结构:图的存储结构之邻接矩阵「建议收藏」

图的术语中,我们提到了网的概念,也就是每条边上都带有权的图叫做网。那些这些权值就需要保存下来。

设图G是网图,有n个顶点,则邻接矩阵是一个n*n的方阵,定义为:

数据结构:图的存储结构之邻接矩阵「建议收藏」

如图7-4-4左图就是一个有向网图。

数据结构:图的存储结构之邻接矩阵「建议收藏」

下面示例无向网图的创建代码:(改编自《大话数据结构》)

 C++ Code 
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

#include<iostream>


using 
namespace std;

#define MAXVEX 
100
/* 最大顶点数,应由用户定义 */


#define INFINITY  
65535 
/* 表示权值的无穷*/

typedef 
int EdgeType;
/* 边上的权值类型应由用户定义 */


typedef 
char VertexType;
/* 顶点类型应由用户定义  */

typedef 
struct

{

    VertexType vexs[MAXVEX];
/* 顶点表 */

    EdgeType arc[MAXVEX][MAXVEX];
/* 邻接矩阵,可看作边表 */

    
int numNodes, numEdges;
/* 图中当前的顶点数和边数  */

} MGraph;


/* 建立无向网图的邻接矩阵表示 */


void CreateMGraph(MGraph *Gp)

{

    
int i, j, k, w;

    cout << 
“请输入顶点数和边数(空格分隔):” << endl;

    cin >> Gp->numNodes >> Gp->numEdges;

    cout << 
“请输入顶点信息(空格分隔):” << endl;

    
for (i = 
0; i < Gp->numNodes; i++)

        cin >> Gp->vexs[i];

    
for (i = 
0; i < Gp->numNodes; i++)

    {

        
for (j = 
0; j < Gp->numNodes; j++)

        {

            
if (i == j)

                Gp->arc[i][j] = 
0;
/* 顶点没有到自己的边*/

            
else

                Gp->arc[i][j] = INFINITY;
/* 邻接矩阵初始化 */

        }

    }

    
for (k = 
0; k < Gp->numEdges; k++)

    {

        cout << 
“请输入边(vi, vj)的上标i,下标j和权值w(空格分隔):” << endl;

        cin >> i >> j >> w;

        Gp->arc[i][j] = w;

        Gp->arc[j][i] = Gp->arc[i][j];
/* 因为是无向图,矩阵对称 */

    }

}

int main(
void)

{

    MGraph MG;

    CreateMGraph(&MG);

    
return 
0;

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210017.html原文链接:https://javaforall.net

(0)
上一篇 2025年7月29日 下午4:22
下一篇 2025年7月29日 下午5:01


相关推荐

  • Eurake注册中心

    Eurake注册中心 eureka找到了&nbsp;有了服务端server用于服务注册与发现,系统中其他的微服务使用客户端client链接服务端,并且维持心跳连接,server端会不断的检查client端是否存活,心跳检测,健康检查,负载均衡功能eureka.client.fetch-registry=false一个服务可以即是…

    2022年6月11日
    43
  • oracle 修改字段长度 用时,Oracle修改字段长度以及计算天数

    oracle 修改字段长度 用时,Oracle修改字段长度以及计算天数sql 修改字段长度的语法 altertable 表名 modify 字段名字段类型 sql 修改字段长度的示例代码 altertableqt bidernoteVAR 4000 标准 SQL 对任何数据库都适用 altertablefz reporttempla 100 修改字段名名称 AL

    2026年3月19日
    2
  • AD域服务器的搭建(3)–搭建AD域

    AD域服务器的搭建(3)–搭建AD域DNS前期准备DNS服务器对域来说是不可或缺的原因:域中的计算机使用DNS域名,DNS需要为域中的计算机提供域名解析服务;域中的计算机需要利用DNS提供的SRV记录来定位域控制器域中哪台计算机来负责做DNS服务器呢?要么使用域控制器来做DNS服务器,要么使用一台单独的DNS服务器。1.创建域控制器创建域控制器其实就是在服务器级计算机上安装一个ActiveDirectory数…

    2022年5月17日
    66
  • 告别命令行与高昂代装费!AutoClaw 本地零门槛部署 OpenClaw,自定义APIkey调度 GPT-5大模型

    告别命令行与高昂代装费!AutoClaw 本地零门槛部署 OpenClaw,自定义APIkey调度 GPT-5大模型

    2026年3月14日
    2
  • Eclipse最新最简最详细安装教程

    Eclipse最新最简最详细安装教程1、首先打开官方地址(见下面)Eclipse官方下载地址:点击打开官方链接2、点击红箭头指向的红框中的“DownloadPackages”。3、出现新的页面之后往下翻找到并点击红箭头指向的红色矩形的部分EclipseIDEforJavaEEDevelopers项的最右边,点击“64-bit”。4、进入到新的页面之后点击红色箭头指向…

    2022年4月8日
    39
  • pycharm中Git第三方库安装

    pycharm中Git第三方库安装pycharmgit 安装 fromgitimpor 问题描述 ERROR Couldnotfind fromversions none ERROR Nomatchingdi Couldnotfind fromversio

    2026年3月27日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号