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

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

图的邻接矩阵(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 嵌入式学习网站推荐[通俗易懂]

    嵌入式学习网站推荐[通俗易懂]嵌入式学习网站推荐  http://blog.chinaunix.net/uid-2413049-id-158374.html转到这里来是为了自己日后好找:-)2.  TheFirstStopfortheLatestICsandComponents非常好的关于微处理器,DSP,可以编程控制器资讯的网站,更新非常快。强烈推荐一些领导级别的人常去,了解行

    2022年5月23日
  • 最新PHP 面试、笔试题汇总(code happy)[通俗易懂]

    最新PHP 面试、笔试题汇总(code happy)[通俗易懂]一、秒杀(商品超卖,高并发,同一用户多次抢购) 后端:redis+队列 redis队列实现,三个队列(库存队列,排队队列,抢购结果队列) 用户先进入排队队列,先进先出,判断是否已经在抢购结果队列,如果在,则直接下一个,如果不在,将用户信息加入抢购结果队列,库存-1,等待数据库空闲时,将抢购结果写入数据库 前端: 面对高并发的抢购活动,前端常用的三板斧是【扩容】【静态化】【限流】 扩容:加机器,这是最简单的方法,通过增加前端池的整体承载量来抗峰值。 静态化:将活动页面上的所有可以静态的

    2022年6月1日
  • 舆情监控系统python开源_舆情监测系统开源

    舆情监控系统python开源_舆情监测系统开源互联网已成为思想文化信息的集散地和社会舆论的放大器。截至2009年6月30日,我国网民数量达到3.38亿人,网民规模已稳居世界第一位,互联网的影响力也日益提升,网络舆论已成为不可小觑的强大社会力量。近年来,网络热点事件频发,其大背景主要有两方面:一是我国社会处于转型期,涌现出一些新矛盾和新问题,如贫富悬殊、官员腐败、传统价值观受冲击等;二是随着互联网技术的迅速发展,越来越多的人上网获取新闻信息,发…

    2022年9月15日
  • C++字符串常见操作函数最全总结

    C++字符串常见操作函数最全总结在做题过程中经常用到字符串,有时候费了很大力气去写一个函数,结果最后发现C++已经封装好了此类函数。。。所以花点时间总结一下。

    2022年6月7日
  • 使用BigDecimal进行科学计算表示方式的转换

    使用BigDecimal进行科学计算表示方式的转换使用BigDecimal进行科学计算表示方式的转换

    2022年6月17日
  • TCP拥塞控制算法(Tahoe/Reno/Newreno)

    TCP拥塞控制算法(Tahoe/Reno/Newreno)TCP拥塞控制算法(Tahoe/Reno/Newreno)前言TCP(TransmissionControlProtocol),传输控制协议,是目前__Internet__上最重要的一个通信协议之一,其作用是对数据的传输进行一定的控制;而拥塞控制算法又是TCP中最重要的一个算法之一,接下来我们先来了解一下基本概念,再来详细介绍3个协议中的拥塞控制算法以及他们之间的区别。前期知识储备及名词…

    2022年6月24日

发表回复

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

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