Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

DULICH

program TimDuongDiCucTieu;

const

max = 20;

maxC = 20 * 100 + 1; {+8}

var

C: array[1..max, 1..max] of Integer;{Ma tran chi phi}

X, BestWay: array[1..max + 1] of Integer; {X do thi cac kha nang, BestWay de ghi nhan nghiem}

T: array[1..max + 1] of Integer; {Ti de luu chi phi di tu X1 den Xi}

Free: array[1..max] of Boolean; {Free de danh dau, Free = True neu chua di qua tp i}

m, n: Integer;

MinSpending: Integer;{Chi phi hanh trinh toi uu}

procedure Nhap;

var

i, j, k: Integer;

begin

ReadLn(n, m);

for i := 1 to n do

for j := 1 to n do

if i = j then C[i, j] := 0 else C[i, j] := maxC; {Khoi tao bang chi phi ban dau}

for k := 1 to m do

begin

ReadLn(i, j, C[i, j]);

C[j, i] := C[i, j]; {Chi phi nhu nhau trên 2 chieu}

end;

end;

procedure Khoitao; {Khoi tao}

begin

FillChar(Free, n, True);

Free[1] := False; {Cac thanh pho la chua di qua ngoai tru thanh pho 1}

X[1] := 1; {Xuat phat tu thanh pho 1}

T[1] := 0; {Chi phi tai thanh pho xuat phat la 0}

MinSpending := maxC;

end;

procedure Thudi(i: Integer); {Thu cac cach chon xi}

var

j: Integer;

begin

for j := 2 to n do {Thu cac thanh pho tu 2 den n}

if Free[j] then {Neu gap thanh pho chua di qua}

begin

X[i] := j; {Thu di}

T[i] := T[i - 1] + C[x[i - 1], j]; {Chi phi := Chi phi buoc truoc + chi phi duong di truc tiep}

if T[i] < MinSpending then {Hien nhien neu co dieu nay thi C[x[i-1],j]< +8 roi }

if i < n then {Neu chua den duoc xn}

begin

Free[j] := False; {Ðanh dau thành pho vua thu}

Try(i + 1); {Tim cac kha nang chon xi+1}

Free[j] := True; {Bo dánh dau}

end

else

if T[n] + C[x[n], 1] < MinSpending then {Tu xn quay lai 1 van ton chi phi it hon truoc}

begin {Cap nhat BestConfig}

BestWay := X;

MinSpending := T[n] + C[x[n], 1];

end;

end;

end;

procedure InKetqua;

var

i: Integer;

begin

if MinSpending = maxC then WriteLn('Khong ton tai duong di')

else

for i := 1 to n do Write(BestWay[i], '->');

WriteLn(1);

WriteLn('Chi phi: ', MinSpending);

end;

begin

Assign(Input, 'vao.inp'); Reset(Input);

Assign(Output,'ra.out'); Rewrite(Output);

Nhap;

KhoiTao;

Thudi(2);

InKetqua;

Close(Input); Close(Output);

end.

Bạn đang đọc truyện trên: Truyen247.Pro

Tags: