近几天刷到了这道题目,对于题干中给的网络秩什么的不太了解,于是花了挺长时间去了解,这篇文章也是帮助理解这道题目。
首先看看题目给的定义:
两座不同城市构成的 城市对 的 网络秩 定义为:与这两座城市 直接 相连的道路总数。如果存在一条道路直接连接这两座城市,则这条道路只计算 一次 。
网络秩是针对两个城市,且一条道路直接连接两座城市只计算一次。
在这里如果看不懂这些名词,我们可以这么理解,网络秩就是让你求一个城市对总共所连接的道路,我们分析题目给的图
求最大网络秩,我们按图中说城市0和1,我们可以看见0城市有[0,1][0,3] 1城市有[1,0][1,2][1,3]
但是有“如果存在一条道路直接连接这两座城市,则这条道路只计算 一次 。”这个条件,所以[0,1]算一次。一共四条道路,即最大网络秩是4。
按照刚才分析,这张图里面城市1,2各自连接道路为3,已经最大了。然后一对重复,故最大网络秩为5。
我们按照这个思路可以分析出解题思路,我们先创建一个二维数组用来储存城市对
如connect[0][1]代表城市0和1,接着再创建一个一维数组用来储存每座城市所连接道路的最大数量。
如num[1],代表城市1所连接的道路最大数量。
题目要求求出最大数量,我们储存完之后,比较每个城市对的网络秩数量-1(重复一条),再输出最大的那一对,这道题目便可解决。
这里面为了增加效率,同时也为了方便先用memset直接将两个数组元素全赋值为0
然后for循环是为了计算每座城市相连道路数量,在此的connect数组返回类型是布尔类型,
下面的connect[x][y] = ture;代表城市x和y之间有道路,然后分别给每座城市连接的道路数量加一。
这就是第二部分:找出最大网络秩
这里-connect[i][j]?1:0 就与上面将元素赋值为true相呼应。如果这两座城市之间有重复道路则减一
这里的MAX(maxnum,rank)是用的宏定义
#define MAX(a, b) ((a) > (b) ? (a) : (b))
最后return最大的网络秩。大概思路就是这样