相关定义和术语
图的逻辑结构特征就是其结点(顶点)的前驱和后继的个数都是没有限制的,即任意两个节点之间都可能相关
图Graph
G=(V,E)
V是顶点的有穷非空集合,E是顶点偶对的有穷集
有向图(Digraph):每条边都有方向;
*无向图(Undigraph):每条边没有方向;
有向完全图:具有n(n-1)条边的有向图;
无向完全图*:具有n(n-1)/2跳变的无向图
网络:带权图
连通图(待跟进):
1.无向图G中,从v到v’有路径,两者连通任意两顶点都联通,则G是连通图非连通图中,存在的连通分量指无向图中的极大连通子图
2.在有向图G中,如果两顶点有路径(注意方向),则连通若每一对顶点之间都联通,则G是强连通图强连通分量指有向图中的极大强连通子图
3.一个连通图的生成树是一个极小连通子图,它包含图中全部顶点,但只有足以构成一棵树的n-1条边
图的存储结构
1.邻接矩阵表示法
1 |
|
图示:
2.邻接表表示法
1 |
|
图示:
3.十字链表表示法
1 |
|
图示:
图的遍历
1.深度优先搜索Depth_First Search
1 | static const int MAX = 1000; |
图示
2.广度优先搜索Broadth_First Search:
1 | Status BFSTraverse(Graph G){ |
图示
最小生成树
1.Prim算法
先将u0入集合,再从剩下的顶点中找出与该集合中顶点最小边的顶点加入集合,直至所有顶点加入集合为止
1 | Status Mgraph::MiniSpanTree_PRIM(MGraph G, VertexType u) { |
2.Kruskal算法
在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中,否则舍去此边而选择下一条代价最小的边,直至所有顶点在同一连通分量上
1 | Status Mgraph::MiniSpanTree_Kruskal(MGraph G){ |
拓扑排序
构造拓扑有序序列:
①在有向图中选择一个没有前驱的顶点且输出之
②从图中删除该顶点和所有以它为尾的弧
拓扑序列不唯一
最短路径
1.Dijkstra算法
1 | const int MAX = 501; |
2.Floyd-Warshall算法
(待跟进)
图代码
1 |
|