关于最小生成树的 prim 算法
2012-10-19 20:21
246 查看
前几天,算法的大概思路大概还是清楚了,就是不知道实现,唉,补作业去了,今天晚上弄了下,没什么头绪,于是先看了百度百科里的程序。
一开始还是搞不懂,后面应该大概明白了,
这是一个 样例数据,储存的方式是邻接矩阵。
一开始还是搞不懂,后面应该大概明白了,
这是一个 样例数据,储存的方式是邻接矩阵。
(0,6,1,5,0,0), (6,0,5,0,3,0), (1,5,0,5,6,4), (5,0,5,0,0,2), (0,3,6,0,0,6), (0,0,4,2,6,0); prim 算法的大概思路是 一开始随便选一个点,找到与之相邻的最小权值,用数组f记录最小,百度百科里的意思大概就是这样了,貌似和向总讲的不一样,为什么他说要用到插入排序,或者用堆优化,可能有其他的实现方法,目前还没想出来。
program self_prim; const map:array [1..6,1..6] of integer=((0,6,1,5,0,0), (6,0,5,0,3,0), (1,5,0,5,6,4), (5,0,5,0,0,2), (0,3,6,0,0,6), (0,0,4,2,6,0)); var i,j,k,l,m,n,min,minn:longint; u,v:set of 1..6; s:array[1..3,1..6]of longint; f:array[1..6]of longint; d:array[1..6]of longint; begin u:=[ ]; v:=[ ]; for i:=1 to 6 do f[i]:=1000; for i:=2 to 6 do v:=v+[i]; l:=1; for i:=1 to 5 do begin min:=1000; for j:=1 to 6 do begin if(map[l,j]<>0)and(map[l,j]<f[j])and(j in v) then begin d[j]:=l; f[j]:=map[l,j]; end; if(f[j]<min)and(f[j]<>0) then begin min:=f[j]; minn:=j; end; end; f[minn]:=0; v:=v-[minn]; s[1,i]:=d[minn]; s[2,i]:=minn; s[3,i]:=min; l:=minn; writeln(s[1,i],' to ',s[2,i],' = ',s[3,i]); end; end.
相关文章推荐
- 关于图的常用算法——Dijkstra单源最短路径、Floyd多源最短路径、Prim和Kruskal最小生成树算法
- 算法:图解最小生成树之普里姆(Prim)算法
- hdu1102 Constructing Roads (最小生成树 prim 算法)
- hdu1875 畅通工程再续 (最小生成树之prim 算法)
- 算法复习 - 最小生成树算法 Prim、Kruskal(普里姆算法、 克鲁斯卡尔算法)
- 最小生成树 : Prim 算法
- 最小生成树Prim算法理解
- 关于图ADT的一些算法——最小生成树算法(普利姆/Prim算法)
- 最小生成树Prim算法理解
- 最小生成树——Prim(普利姆)算法
- 无向带权图的最小生成树算法——Prim及Kruskal算法思路
- 最小生成树 ,prim 和Kruskal 算法
- 关于最小生成树中的 Kruskal(克鲁斯卡尔)算法
- 贪心算法——Prim最小生成树
- 最小生成树算法之Prim
- python实现prim 最小生成树算法
- Java 版 Prim 算法求最小生成树
- 最小生成树 Prim 算法
- 最小生成树Prim算法理解
- Prim最小生成树算法