请大家帮忙看到 “程序补充题”
A B 两个城市之间设有N个路站(如下图的S1,且N<100),城市与路站之间。路站与路站之间各有若干条路段(各路段<20)且每条路段上的距离均为一个整数)
AB的一条通路是指:从A出发,可经过任一路段到达S1,再从S1出发经过任一路段,。。。最后到达B。通路上路段距离之和称为通路距离(最大距离《1000)
当所有路段距离给出之后,求所有不同距离的通路个数(相同距离仅记一次)。
算法说明:本题采用穷举算法
数据结构:N:记录A,B间路站的个数;
数组D[I,0]记录第I-1到第I路站间路段的个数;
D[I,1],D[I,2],。。。记录每个路段距离;
数组G记录可取到的距离
程序清单
Program chu7_6(input,output);
var i,j,n,s:integer;
b:array[0..100] of integer;
d:array[0..100,0..20] of integer;
g:array[0..1000] of 0..1
begin
readln(n)
for i:=1 to n+1 do
begin
readln(d[I,0]);
for j:=1 to d[I,0] do readln(d[I,j])
end;
d[0,0]:=1;
for i:=1 to n+1 do b[i]=1;
b[0]:=0;
for i :=1 to 1000 do g[i]:=0;
while "B[0]=0" do
begin
s:=0;
for i:=1 to n+1 do
s:="S+D[I,B[I]]"
g[s]:=1;j:=n+1;
while "B[J]=D[J,0]" do j:=j-1;
b[j]:=b[j]+1;
for i:=j+1 to n+1 do b[i]:=1
end;
s:=0;
for i:=1 to 1000 do
s:=s+G[I];
writeln(s);readln
end
上面加引号的部分为补充内容,请高手给讲解一下为什么,谢谢!