Description
在一个地图上有N个地窖(N<=20),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。
例如:
Input
Output
K1 K2,……,KV(挖地雷的顺序)
MAX (挖地雷的数量)
Sample Input
5
10 8 4 7 6
1 1 1 0
0 0 0
1 1
1
Sample Output
1 3 4 5
27
思路:
有人说是dp题,但是因为比较懒也就用dfs刷过了。查找每一个可以挖的地雷,因为题目给出的邻接矩阵比较特殊所以不用标记重复的地雷,用一个数组l记录路径。手气很好一次过。
源代码/pas:
var
n,max:Longint;
a:array[1..21,1..21]of longint;
l,r,v:array[0..21]of longint;
procedure dfs(x,y:longint);
var
i:longint;
begin
if y>max then
begin
max:=y;
r:=l;
end;
for i:=1 to n do
if a[x,i]=1 then
begin
l[x]:=i;
dfs(i,y+v[i]);
l[x]:=0;
end;
end;
procedure init;
var
i,j:longint;
begin
readln(n);
for i:=1 to n do read(v[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
read(a[i,j]);
for i:=1 to n do
begin
l[0]:=i;
dfs(i,v[i]);
fillchar(l,sizeof(l),0);
end;
end;
procedure print;
var
i:longint;
begin
i:=0;
while r[i]<>0 do
begin
i:=r[i];
write(i,' ');
end;
writeln;
writeln(max);
end;
begin
init;
print;
end.