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

数据结构:图的存储结构之邻接矩阵「建议收藏」图的邻接矩阵(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 递归和迭代

    递归和迭代一.递归(Recursion)1.递归:以相似的方式重复自身的过程2.递归在程序中表现为:在函数的定义中直接或间接调用函数自身3.递归和循环:(1)递归是有去(递去)有回(归来),因为存在终止

    2022年7月4日
    16
  • 解决:navicat for mysql连接失败[通俗易懂]

    解决:navicat for mysql连接失败[通俗易懂]1、问题描述:在navicatformysql连接mysql8.0.23时,出现如下错误。2、原因:通过百度翻译,发现是由于navicat版本的问题,出现连接失败的原因。这也就是说需要升级navicat版本。通过搜索,发现navicat是收费的,升级将会面临其他不可控的问题。于是需要寻找其他方法。通过查阅资料以及他人的经历分享。我得知了:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password

    2022年10月14日
    0
  • goland 2021.12激活码[最新免费获取]「建议收藏」

    (goland 2021.12激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月30日
    163
  • kl1083_显示器dpi是什么意思

    kl1083_显示器dpi是什么意思Windy 定义了一种 Windy 数:不含前导零且相邻两个数字之差至少为 2 的正整数被称为 Windy 数。Windy 想知道,在 A 和 B 之间,包括 A 和 B,总共有多少个 Windy 数?输入格式共一行,包含两个整数 A 和 B。输出格式输出一个整数,表示答案。数据范围1≤A≤B≤2×109输入样例1:1 10输出样例1:9输入样例2:25 50输出样例2:20#include<bits/stdc++.h>using namespace std;

    2022年8月9日
    4
  • grub引导界面_grub2引导

    grub引导界面_grub2引导添加Vista启动项至GrubforDOS:menu.lst中添加以下启动项.titleMicrosoftWindowsVistaroot(hd0,0)chainloader/bootmgr####EndDefaultOptions##title      Ubuntu8.10,kernel2.6.27-7-genericuuid      a48f2bb1-…

    2022年10月12日
    0
  • 【11】进大厂必须掌握的面试题-持续集成面试

    Q1。持续集成是什么意思? 我将建议您通过对持续集成(CI)进行小的定义来开始此答案。这是一种开发实践,要求开发人员每天多次将代码集成到共享存储库中。然后,每个签入均由自动构建进行…

    2020年10月20日
    321

发表回复

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

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