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


    文章概述:

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

            

    思路概述:

            和开灯游戏一样,我们可以使用数组的下标来表示不同的城市比如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

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

  • 相关阅读:
    Pikachu靶场——XXE 漏洞
    [手写系列] 带你实现一个简单的Promise
    eclipse如何安装server
    对称密码模式
    【甄选靶场】Vulnhub百个项目渗透——项目十三:SickOs 1.2(防火墙绕过,计划任务写入)
    雷电模拟器报错:g_bGuestPoweroff.fastpipeapi. cpp_1153_1161
    【工具】电脑网络连接正常,但是有些页面无法登录,如何解决?
    FFmpeg 命令:从入门到精通 | ffppeg 命令参数说明
    【LeetCode】【剑指offer】【丑数】
    【21天学习挑战赛—经典算法】索引查找
  • 原文地址:https://blog.csdn.net/markingyi/article/details/141064272