图的基本概念
在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。
图的定义:图是由顶点的有穷非空集合和顶点之间的边的集合组成的,G表示,V是图G中顶点的集合,E是图G中边的集合
无向图:任意两点的边都是无向边组成的图(无向边:(A,B)表示点A能到点B,点B也能到点A)
有向图:任意两点的弧都是有向边组成的图(有向边:<A,B>表示点A能到点B,点B不能到点A(B为弧头,A为弧尾)
边较少的图叫稀疏图,反之叫稠密图
权,网:图的边或弧相关的数叫权,这种带权的图通常叫做网
顶点的度:无向图中顶点的度表示和顶点相关联的的边的数目(记TD);有向图中分为入度和出度
入度为顶点为弧头有关联的弧,出度为顶点为弧尾有关联的弧
路径长度:路径长度是路径上边或弧的数目
回路,环:第一个顶点和最后一个顶点相同的路径称为回路或环
连通图:图中任意两点都是连接的(有路径),有向图中称为强连通图。
存储方式
邻接矩阵:
其实就是用二维数组来存储数据,如果顶点数据是其他的加给结构体就行。有相图其实就是列与行哪个在前的改变。
邻接表:
就是用链表来进行存储,其指针域是代表指向的那条边的顶点。
十字链表与邻接多重表
总的来说要看情况来使用图的存储方式。
最小生成树算法理解
prim算法
此算法难点就是如何更新并判断顶点与树之间的最小代价因为代价值是可能发生改变的。
算法实现
这里用了isjoin与lowcost数组来实现,lowcost如何更新其实就只要把你新加入的哪个顶点与其他顶点的边权值相比较,如果值较之前原来的树与此顶点的值小就更新新的权值。isjoin是防止重复加入树。
kruskl算法
此算法难点就是如何判断联通,是不是很熟悉,其实就可以应用并查集思想了,而且还要用到排序因为此算法要一个个边权从小到大来连接。
此上就是我对此算法的理解。