您的位置:首页 > 其它

关于最小生成树的 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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: