一起talk C栗子吧(第四十三回:C语言实例--图)

来源:互联网 发布:聚宝盆返奖统计软件 编辑:程序博客网 时间:2024/05/17 20:28


各位看官们,大家好,上一回中咱们说的是哈夫曼编码的例子,这一回咱们说的例子是:图。闲话休提,

言归正转。让我们一起talk C栗子吧!


看官们,提到图,大家可能会想到各种藏宝图,哈哈。不过我们说的图不是藏宝图,它是一种用来存储数

据的数据结构。举个日常生活中的例子:春节回家时,要穿越几个省市才能到家,这时需要选择回家的路

线,于是把回家途中的的省市当作结点,从一个省市到另外一个省市路径当作线。这样就构成了一张回家

图。这么可能比较抽象,我们通过图形来说明,请看下图:



假如我们在城市A,家在城市F,从A到F的途中有城市B,C,D,E。其中两个点之间有连线的表示这两个

城市之间有火车。那么从图中可以看出:回家的路线有以下三种:


A-C-F        //经过城市少,回家路途最近A-C-D-F      //从城市C到F的车票不好买,需要绕路到城市D,然后才能回家A-B-E-F      //经过城市多,而且路途最远。这条路上都是高铁,虽然路途远,但是可能会快一些

大家,通过这个图,我想大家都明白了图这个抽象概念了吧。


接下来我们说说如果在代码中存储图。我们可以二维数组来存放图,二维数组的行数和列数为图中点的个

数,如果两个点A,B之间有路径,那么就把二维数组中A行B列的值设定为1;如果没有路径就设定为0。这

种存储图的二维数组叫作邻接矩阵。下面是刚才例子中图的邻接矩阵,为了方便观察,我把行列的名字使

用点的名字命名,而且值为0的地方没有写出来。




通过邻接矩阵可以方便地表示图,不过它也有一些缺点,大家看看上面的邻接矩阵图,图中有边的地方在

邻接矩阵中就有值,图中无边的地方在邻接矩阵中没有值,这样造成了邻接矩阵中有很多空白的地方。“这

么多的空白不去使用,真是浪费呀”,这位看官说的太对了呀,这就是邻接矩阵的缺点:它会浪费一定的存

储空间,而且当图中边数少的时候更加明显。


各位看官,关于图的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。


0 0