图(graph)html
与树相似,图由结点和这些结点之间的链接构成。java
[x] <font color = navy>顶点(vertice)</font>就是这些结点。node
[x] <font color = navy>边(edge)</font>就是这些结点链接起来的线段。git
[x] <font color = navy>路径(path)</font>:图中的一系列边,每条边连通两个顶点。算法
[x] <font color = navy>路径的长度(length)</font>:是该路径中边的条数(或者是顶点数减去1)。数组
[x] <font color = navy>环路(cycle)</font>:一种首结点和末结点相同且没有重边的路径。没有环路的图称为无环的(acyclic)。网络
[x] <font color = navy>彻底图(complete graph)</font>:含有最多条边的无向图 数据结构
无向图(undirected graph) oop
无向图是一种边为无序结点对的图。学习
有向图(directed graph)
边为有序顶点对的图。也称为双向图(digraph)。
网络(network)
有向网络
无向网络
网络(带权图):每条边都对应一个权值(数据信息)的图。(例如:城市之间的航线票价)
(Boston ,New York ,120)
、(Boston ,Philadeiphia , 199)等
<font size =3>经常使用的图算法 :</font>
图的遍历:
测试连通性:
生成树(spanning tree):包含图中全部顶点及图中部分边的一棵树。
最小生成树(minimum spanning tree):所含边权值之和小于其余生成树的边的权值之和。
断定最短路径:
① 断定起始顶点和目标顶点之间是否存在最短路径(两个顶点之间边数最少的路径)。 ② 在加权图中找到最短路径。(Dijkstra算法)
图的实现策略:
邻接列表:用一种相似于链表的动态结点来存储每一个结点带有的边。这种链表称为邻接列表。
邻接矩阵:用一种叫邻接矩阵的二维数组来表示任意两个顶点的交接状况。
无向图的邻接矩阵必定是对称的,有向图的邻接矩阵不必定对称。
<table><tr><td bgcolor = lightgreen>“拓扑序(topological order):若是有向图中没有环路,且有一条从A到B的边,则能够把顶点A安排到顶点B以前,这种排列获得的顶点次序称为拓扑序。”</td></tr></table>
从上能够看出,关键是寻找入度为0的顶点。
一种方式是遍历整个图中的顶点,找出入度为0的顶点,而后标记删除该顶点,更新相关顶点的入度,因为图中有n个顶点,每次找出入度为0的顶点后会更新相关顶点的入度,所以下一次又要从新扫描图中全部的顶点。故时间复杂度为O(n^2)。
一、图中顶点用一个一维数组存储,另外,对于顶点数组中,每一个数据元素还须要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。
二、图中每一个顶点vi的全部邻接点构成一个线性表,因为邻接点的个数不定,因此用单链表存储,无向图称为顶点vi的边表,有向图称为顶点vi做为弧尾的出边表。
(1) 初始时,S只包含起点s;U包含除s外的其余顶点,且U中顶点的距离为"起点s到该顶点的距离"[例如,U中顶点v的距离为(s,v)的长度,而后s和v不相邻,则v的距离为∞]。 (2) 从U中选出"距离最短的顶点k",并将顶点k加入到S中;同时,从U中移除顶点k。 (3) 更新U中各个顶点到起点s的距离。之因此更新U中顶点的距离,是因为上一步中肯定了k是求出最短路径的顶点,从而能够利用k来更新其它顶点的距离;例如,(s,v)的距离可能大于(s,k)+(k,v)的距离。 (4) 重复步骤(2)和(3),直到遍历完全部顶点。
经过理解及其博客里面的代码讲解,就能够明白该算法的奥妙啦。
问题2:在作pp15.1的时候出现了越界的问题。
问题2的解决:正在改正····
图这一章颇有趣。不少算法实现很新颖,须要好好理解消化。 还有代码实现确实很费时间呀(绕来绕去绕不过来) 正在继续告诉本身,请对专业课更加虔诚一点。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 0/0 | 1/1 | 8/8 |
第二周 | 621/621 | 1/2 | 12/20 |
第三周 | 678/1299 | 1/3 | 10/30 |
第四周 | 2734/4033 | 1/4 | 20/50 |
第五周 | 1100/5133 | 1/5 | 20/70 |
第六周 | 1574/6707 | 2/7 | 15/85 |
第七周 | 1803/8510 | 1/8 | 20/105 |
第八周 | 2855/11365 | 2/10 | 25/130 |
第九周 | 2076/13441 | 1/11 | 25/155 |