-
var n,ans:longint; f:array[1..30] of boolean; a:array[1..40,1..40] of longint; procedure init; var i,j:longint; begin readln(n); for i:=1 to n do begin for j:=1 to n do read(a[i,j]); readln; end; fillchar(f,sizeof(f),false); ans:=maxlongint; end; procedure dfs(dep,s,l:longint); var i:longint; begin if dep>n then begin if ans>s then ans:=s; exit; end; for i:=1 to n do begin if (l<>i)and(f[i]=false)and(s+a[l,i]<ans) then if (dep<n)and(i<>1) then begin f[i]:=true; dfs(dep+1,s+a[l,i],i); f[i]:=false; end else if dep=n then begin f[i]:=true; dfs(dep+1,s+a[l,i],i); f[i]:=false; end; end; end; begin init; dfs(1,0,1); write(ans); end.
货员的难题 程序
最新推荐文章于 2024-09-15 12:15:49 发布