mjko2000
user-avatar

Nguyễn Đức Anh

Đóng góp: 0

Ngày sinh: 03/01/1999

Đăng ký: 24/04/2016

Lần đăng nhập cuối: 23/06/2016


Kết nối tài khoản

VOJ: Chưa kết nối

Topcoder: Chưa kết nối

Kiểm tra thuật toán ROADS.

Đây là ctrình con theo kiểu đệ quy của mình cho bài toán http://vnoi.info/problems/show/ROADS/ 

Nhưng lại không ra KQuả theo bài test, mong các bạn có thể xem và sửa giúp

Chú thích:

C là mảng chứ các thành phố đã đi qua, h là chỉ số của mảng.

Z,X lần lượt là độ dài đã đi và số tiền phải trả, k là số tiền lớn nhất có thể dùng.

S là thành phố hiện tại, i là thành phố dự tính sẽ đi, ktra là hàm boolean để xem thành phố i có thuộc mảng C hay không.

Min là độ dài đường đi ngắn nhất.

 

PROCEDURE roads(s,h,z,x:INTEGER);
BEGIN
    IF s=6 THEN BEGIN
        IF x<k THEN IF z<min THEN min:=z;
    END ELSE
    FOR i:=1 TO n DO       
    IF kt(i)=TRUE THEN IF a[s,i]<>0 THEN
    BEGIN
        c[h]:=s;
        z:=z+a[s,i];x:=x+b[s,i];
        roads(i,h+1,z,x);
    END;
    c[h]:=0;
END;

 

Xác định lỗi của thuật toán Hoán Vị.

Ai tìm giúp mình lỗi trong thuật toán này với!

VAR
dem,i,j,n,k:INTEGER;
kt:BOOLEAN;
a:ARRAY[1..100,1..100] OF INTEGER;
PROCEDURE hv(dem:INTEGER);
BEGIN
    FOR i:=1 TO n DO BEGIN
        kt:=TRUE;
        IF dem>1 THEN FOR j:=1 TO dem-1 DO IF a[k,j]=a[k,dem] THEN kt:=FALSE;
        IF kt=TRUE THEN a[k,dem]:=i;
        IF dem < n THEN hv(dem+1) ELSE k:=k+1;
    END;
END;
BEGIN
    readln(n);
    k:=1;
    hv(1);
    FOR i:=1 TO k-1 DO BEGIN
        FOR j:=1 TO n DO write(a[i,j]);
        writeln;
    END;
    readln;
END.