• 图论------如何使用矩阵来存储图的信息(邻接矩阵表示法)。


    文章概述:

            刚开始图论我们先不急于解决实际的问题,先去搞明白如何存储图的信息。实际上我们早就接触过类似的内容,比如上一篇文章的开灯关灯游戏中,我们使用一维数组来表示一排灯的状态,但是如果要表示更加复杂的内容怎么办呢?比如我们在地图上知道几座城市之间的交通路线图,明白城市与城市之间是不是联通的,如果联通的话,具体路程是多少的信息该如何储存就是我们这篇的目的。

            

    思路概述:

            和开灯游戏一样,我们可以使用数组的下标来表示不同的城市比如arr[5][5],表示有5座城市,arr[1][2]表示城市1到城市2的路程,arr[2][1],表示城市2到城市1的路程,根据具体问题不同可以将图分为有向图和无向图。

            无向图解释起来就是假设有两块地区,为地区a和地区b,二者之间建立了一条双向通道,这样的话a到b和b到a的路程长度一样,arr[a][b] == arr[b][a],所以无向图的矩阵都是关于主对角线对称的。

            有向图就是a,b二者之间的道路是两道单向道路,或者只有一条单向道路。这时候从a到b和从b到a的路程就不一样了。

            无论是有向图还是无向图,我们都要让arr[x][x]=0,因为从x城市到x城市的路程为0,所以矩阵的主对角线都为0.

            如果一所城市到另一所城市没有通路,例如a到b没有通路,那么我们可以给arr[a][b]赋值为负数或者正无穷(一个极大的数字)来表示。

    具体图解:

            

            

            总结来看无向图矩阵主对角线元素为0,矩阵关于主对角线对称。

            有向图矩阵主对角线元素为0,一般不关于主对角线对称。

    课后习题:

            

    题目描述
    在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的  T-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

    输入输出格式
    输入格式
    第一行是两个整数 N,M,N 表示成都的大街上有几个路口,标号为 1 的路口是商店所在地,标号为 N 的路口是赛场所在地,M 则表示在成都有几条路。
    接下来 M 行,每行包括三个整数 A,B,C,表示在路口 A 与路口 B 之间有一条路,我们的工作人员需要 C 分钟的时间走过这条路。
    输入保证至少存在 1 条商店到赛场的路线。
    输出格式
    输出一行,表示工作人员从商店走到赛场的最短时间。

    输入输出样例1
    输入
    3 3
    1 2 5
    2 3 5
    3 1 2
    输出
    2

    输入输出样例2
    输入
    2 1
    1 2 3
    输出
    3

            在此大家只要能使用图的邻接矩阵表示法将图表示出来,本文的目的便已经达成了,关于这道题的具体做法也不难,大家可以使用我们先前讲过的深度优先搜索来解决,之后我会带来更多的图论算法。

  • 相关阅读:
    【ES6】学习笔记:正则扩展
    微信小程序更改AI类目-深度合成-AI绘画/AI问答教程
    【刷题系列】顺序表OJ题
    【Hack The Box】linux练习-- SolidState
    HTML5+CSS3+JS小实例:打散文字随机浮动特效
    编程要搞明白的东西(二)
    Python之父加入微软三年后,Python嵌入Excel!
    anita的音乐空间(项目)
    CentOS 7 安装 openGauss 3.0 企业版(单节点)
    抢滩未来 音视频引领新趋势
  • 原文地址:https://blog.csdn.net/markingyi/article/details/141064272