2004 年江苏省信息学奥林匹克集训队讲义 图的广度优先搜索的应用
for i:=1 to w do
begin
f:=f+1;m:=L[f];e[m]:=1; {取队首结点,并设访问过标记}
for t:=1 to n[m] do {依次访问 m 结点的相邻结点}
if e[d[m,t]]=0 then {若 m 的相邻结点没有访问过}
begin
r:=r+1;L[r]:=d[m,t];b[r]:=f; {则进队列}
end;
end;
w:=r+1-g[h]; {计算第 h 层的新结点数目}
s:=0;
for k:=g[h] to r do {检查第 h 层上的新结点是否存在目标结点}
if L[k]=ed then {等于目标结点}
begin
s:=s+1;p:=b[k];j:=1;
c[s,j]:=L[k];
while p<>1 do
begin j:=j+1;c[s,j]:=L[p];p:=b[p]; end;
j:=j+1;c[s,j]:=L[p];
for t:=j downto 1 do
if t=1 then writeln(c[s,t]) else write(c[s,t],'-');
end;
if s<>0 then
begin
writeln(st,'-',ed,'total=',s,'step=',j-1);
bb:=false;
end;
end;
end.
输入:
start:1
end:8
输出:
1-2-7-8
1-3-5-8
1-4-6-8
1-8 total=3 step=3
输入:
start:2
end:6
输出:
2-1-4-6
2-3-4-6
2-3-5-6
金陵中学河西分校 朱学兴 地址:梦都路 60 号 邮编:210012 TEL:13770508338 Emil:
jsytzhu@sohu.com