不是VIP会员,不能显示答案

题目解答

题目:
const
v = 100;
var
visited:array[1..v]of boolean;
e:array[1..v,1..v]of integer;
n,m,ans,i,j,a,b,c:integer;

procedure dfs(x,len:integer);
var
i:integer;
begin
visited[x] := true;
if len > ans then
ans:=len;
for i:=1 to n do
if (not visited(i)) and(e[x,i] <> -1) then
dfs(I,len+e[x,i]);
visited[x] := false;
end;

begin
readln(n,m);
for i:=1 to n do
for j:=1 to n do
e[i][j] := -1;
for i:=1 to m do
begin
readln(a,b,c);
e[a][b]:=c;
e[b][a]:=c;
end;
for i:=1 to n do
visited[i]:=false;
ans:=0;
for i:=1 to n do
dfs(i,0);
writeln(ans);
end.

输入:
4 6
1 2 10
2 3 20
3 4 30
4 1 40
1 3 50
2 4 60

输出:150
考点: 0
分析:
解答: 一眼看去,过程名叫DFS,输入是个无向图,len>ans的话ans:=len,可以得知这是个在图中用DFS找最长的路径的程序。DFS以任意点作为起点,找一条路径,本次走过的点不走,找到没路走为止。由于就4个点,最多就走3条边,看看最长的那3条,60 50 40,可以一次走完,即走2-4-1-3可以走完这3条边,所以ans是150。
评论:
老师: 0