E
equation_xyz
Unregistered / Unconfirmed
GUEST, unregistred user!
一, 下面是改进的选择排序法,每次从数组a[1..n]中选出当前最大的元素,将其换到a的尾部,选择最大元素时,每发现一个比a更大的元素时,就进行交换,并记下交换位置,使下一次交换时能缩小选择范围。
begin
k:=1;b[1]:=1;
___?___:=n;m:=1;
while i>1do
for j:=m to ____?____do
if a[j]>a then
begin
w:=a;a:=a[j];a[j]:=w;
k:=k+1;___?___
end;
____?____;
m:=b[k];
if k>1 then
___?___;
w:=a;a:=a[m];a[m]:=w;
end
end
二,下面的类pascal程序是求无向连同加权图的最小生成树的prim算法,顶点编号为1到n,边用实型的邻接数组c[1..n,1..n]存储。
待选边和最后的生成树边共同存储在t[2..n]中,t的元素是记录类型,共两个域,域v1表示已在生成树中的顶点号,域v2表示尚未在生成树中的顶点号,(t.v1,t.v2)表示顶点 i所对应的待选边,开始时,只有编号为1的顶点在生成树中。
begin
for i:=2 to ndo
begin
t.v1:=1;___?___:=i end;
for i:=2 to ___?___do
begin
j:=i;
for k:=k+1 to ndo
{选择最短的待选边}
if c(t[k].v1,t[k].v2)< c(t[j].v1,t[j].v2) then
___?___;
交换t和t[j];
v:=___?___;
for k:=i+1 to ndo
if c(t[k].v1,t[k].v2)< c(v, t[k].v2) then
___?___
end
end
begin
k:=1;b[1]:=1;
___?___:=n;m:=1;
while i>1do
for j:=m to ____?____do
if a[j]>a then
begin
w:=a;a:=a[j];a[j]:=w;
k:=k+1;___?___
end;
____?____;
m:=b[k];
if k>1 then
___?___;
w:=a;a:=a[m];a[m]:=w;
end
end
二,下面的类pascal程序是求无向连同加权图的最小生成树的prim算法,顶点编号为1到n,边用实型的邻接数组c[1..n,1..n]存储。
待选边和最后的生成树边共同存储在t[2..n]中,t的元素是记录类型,共两个域,域v1表示已在生成树中的顶点号,域v2表示尚未在生成树中的顶点号,(t.v1,t.v2)表示顶点 i所对应的待选边,开始时,只有编号为1的顶点在生成树中。
begin
for i:=2 to ndo
begin
t.v1:=1;___?___:=i end;
for i:=2 to ___?___do
begin
j:=i;
for k:=k+1 to ndo
{选择最短的待选边}
if c(t[k].v1,t[k].v2)< c(t[j].v1,t[j].v2) then
___?___;
交换t和t[j];
v:=___?___;
for k:=i+1 to ndo
if c(t[k].v1,t[k].v2)< c(v, t[k].v2) then
___?___
end
end