1、图及无向图php
2、有向图html
3、网络java
4、经常使用的图算法web
(1)广度优先遍历:算法
一、往队列中添加9,而且把它标记为已访问;编程
二、从队列中取出9;数组
三、往链表中添加9;网络
四、从队列中添加六、七、8,逐个标记为已访问;数据结构
五、从队列中取出6;学习
六、往链表中添加6;
七、往队列中添加三、4,逐个标记为已访问。
八、从队列中取出7,并将它添加到链表中;
九、往队列中添加5,而且把它标记为已访问;
十、从队列中取出8,并将它添加到链表中(这时再也不往队列中添加任何新的结点了,由于顶点8再也没有还没有访问过的邻居了)
十一、从队列中取出3,并将它添加到链表中;
十二、往队列中添加1,而且把它标记为已访问;
1三、从队列中取出4,并加它添加到列表中;
1四、往队列中添加2,而且把它标记为已访问;
1五、从队列中取出5,并将它添加到列表中(因为再没有未访问过的邻居,所以不需再往队列中添加顶点)
1六、从队列中取出2,并将它添加到链表中;
1七、从队列中取出2,并将它添加到列表中。
这样列表就以广度优先次序存放了从顶点9开始的以下顶点:九、六、七、八、三、四、五、1和2.
起始顶点 | 广度优先遍历 |
---|---|
A | A,B,C,D |
B | B,A,D,C |
C | C,B,A,D |
D | D,B,A,C |
起始顶点 | 广度优先遍历 |
---|---|
A | A,B,C |
B | B,A,C |
C | C,B,A |
D | D |
有向图有时也称为双向图。
有向图中的路径并非双向的。
就这两句话,我产生了疑问,为何有向图不为双向,但叫作双向图,他所谓的双向是同样的吗?
在第二张很显然就是一个双向的网络,网络一样也是图的一种,可是我很详细的看了一下有向图中的路径并非双向的。这句话出现的地方,这句话后买呢还接着一句话:除非咱们添加了额外的边连通他们俩,也就是这句话介绍是就假如A指向了B,可是在前提中就没有让B指向A,当咱们有指向返回的那条边的时候才能够有双向,因此我以为书本在这里写的会误导第一次学习有向图的同窗。
Weight[getIndex((T) vertex1)][getIndex((T) vertex2)]=weight;
,用于对于权重添加到一个二位数组中,同时在无向图中是有与它对称的语句Weight[getIndex((T) vertex2)][getIndex((T) vertex1)]=weight;
,这样就讲连起来的线给赋予一个权重。T
,而后用一个result
记录下来,进行重复的找而后找到一条路走到尽头,将结果存进一个数组中,重复过程。个人初版代码以下Double[] temp = new Double[100]; Double result=0.0; int a =0; int b =0; int c=0; for (int i =0;i<end+1;i++){ start=c; result=0.0; for (int j =b;j<end;j++) { result=0.0; start=a; for(int r=b;r<end;r++){ result += Weight[start][r + 1]; start=r+1; } temp[a]=result; a++; b=b+2; } a++; b++; } //我经过一直讲这个二维数组的位置进行查找在相加再保存
Double min = temp[0]; for (int r =0;r<end;r++){ if (temp[r+1]<min&&temp[r+1]>0){ min=temp[r+1]; } } return min;
五、为何我会毙掉初版,由于存在着很大的问题,首先,假如我插入的元素够多,个人循环不够多,(我想过用递归实现,可是由于涉及二维数组的横向判断,因此我以为递归也不行),而后就是由于涉及到横向的判断,举个例子,假如A和B连了,B和C连了,B和D也连了,这个时候咱们就多了一路,由于二维数组移动的位置太不可控,因此位置的增长减小就存在很大的问题,因此就陷入了一直想用连续循环的这个弊病中,一时半会儿一直解决不了这个问题,就想着能不能用咱们pp15.1须要实现的方式,也就是用链表的方式。
六、(1)首先咱们先构建这样的一个图:
(2)而后咱们须要构建相似链地址法绘制出一个以下图的图:
(3)个人新的一版思路是:当咱们在保存头结点的数组中找到开始的结点,而后再须要写循环进行对因而否链接进行判断,在进行将权重相加,可是我依旧又是毙了这一版,由于在偶尔的一天晚上凌晨,翻到了算法导论图论的这一部分,看到了里面讲解的有一部分叫作单源最短路径,发现这一部分和这个题目存在着很大的关联,就仔细的看了看,有一个算法就是针对此类题型设计的,叫作Dijkstra算法,我很感谢我当时买了这本书,让我从痛苦中走了出来。
(4)Dijkstra算法:
(1)第一个选择的顶点是v1,路径长是为0;该顶点标记为known。既然v1是known的,那么某些表项就须要调整。邻接到v1的顶点是v2和v4。这两个项获得调整。
(2)下一步,选取v4而且标记为known。顶点v3,v5,v6,v7是邻接的顶点,而它们实际上都须要调整。如图
(3)接下来选择v2,v4是邻接的点,但已是known的了,所以对它没有工做要作。v5是邻接的点但不作调整,由于通过v2的值2+10=12而长为3的路径已是已知的。图
(4)下一个被选择的顶点是v5,其值为3。v7是惟一的邻接顶点,可是它不用调整,由于3+6>5.而后选取v5,对v6的距离下调到3+5=8。如图:
(5)再下一个选取的顶点是v7,v6下调到5+1=6,如图:
(6)最后,咱们选取的顶点是v6。最后的表在下图中显示,在以下的图形显示算法期间是如何标记为known的以及顶点是如何更新的。
本周无测试。
代码调试中的问题和解决过程, 一个问题加1分
第一次要好好写写感悟了:
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 0/0 | 1/1 | 6/6 |
第二周 | 1313/1313 | 1/2 | 20/26 |
第三周 | 901/2214 | 1/3 | 20/46 |
第四周 | 3635/5849 | 2/4 | 20/66 |
第五周 | 1525/7374 | 1/5 | 20/86 |
第六周 | 1542/8869 | 2/5 | 25/111 |
第七周 | 1391/10260 | 1/6 | 20/131 |
第八周 | 4379/14639 | 2/8 | 25/156 |
第九周 | 3155/17794 | 1/9 | 30/186 |
蓝墨云班课
Java程序设计
算法导论:别点了,是本书
数据结构与算法分析:别点了,是本书
Dijkstra 最短路径算法 秒懂详解