Cho mình hỏi bài TRAFFICN với! Bài này thuật toán của mình là:

 Gọi d[I,1] là thời gian ngắn nhất đi từ s đến I mà chưa thêm 1 cạnh nào.

        D[I,2] là thời gian ngắn nhất đi từ s đến I mà đã thêm 1 cạnh vào.

Sau đó mình sử dụng thuật toán dijkstra với cấu trúc heap để tính nhưng bài mình vẫn kết quả sai. Mình đã cố gắng tìm và sửa 1 số lỗi mà vẫn chưa đạt kết quả. Là do mình cài đặt sai thuật toán hay sai về thuật toán? Bạn nào giúp mình với! Mình để code bên dưới :)

http://ideone.com/WPGp3F

Thuật toán của bạn đúng rồi, bạn xem lại các hàm thêm cạnh của mình nhé.

Để tránh lỗi tương tự thì lúc dịch bạn nên bật hết warning, hint và note.

Trả lời net12k44
  Hiện bài gốc

Bạn có thể giải thích cho mình thêm được ko? Mình chưa biết phần thêm cạnh bằng danh sách liên kết của mình sao lại sai? bình thường mình vẫn hay viết như vây :) Cho mình hỏi mấy cái warning,hint và note dùng để làm gì vậy?  cảm ơn bạn nhiều !

Trả lời it.lhp.ynwa
  Hiện bài gốc

Theo mình hiểu ý của net12k44 là đặt thêm mấy cái kiểu như {$R+, Q+} (đây là 2 cái quan trọng nhất mà mình biết), thì ví dụ khi tính toán bị tràn hoặc tràn mảng thì chương trình sẽ chạy bị lỗi thay vì tiếp tục chạy và sai.

Nếu bạn bị sai thì bạn nên tự vẽ ra 1 số trường hợp random rồi chạy thử. Với những bài đồ thị thì nguyên tắc chung là kiểm tra những trường hợp kiểu như:

  • Đồ thị ko liên thông
  • Đồ thị có nhiều cạnh giữa 2 đỉnh
  • Đỉnh xuất phát = đỉnh kết thúc
  • Có cạnh nối giữa 1 đỉnh và chính nó.
Trả lời it.lhp.ynwa
  Hiện bài gốc

Sử dụng các cái warning để lúc dịch, trình biên dịch có thể báo cho bạn biết một số lỗi có thể gặp phải. Ví dụ như biến trong chương trình con chưa được khởi tạo hay biến bạn khai báo mà không dùng.

Còn phần thêm cạnh của bạn bị nhầm giữa u và u1. Nếu dịch mà có thêm hint thì nó sẽ báo như sau:

thu.pas(22,16) Hint: Parameter "u1" not used
thu.pas(32,17) Hint: Parameter "u1" not used

Hi vọng bạn không bị lỗi này lần sau.

Trả lời RR
  Hiện bài gốc

cảm ơn lời góp ý của anh nhiều :)

Trả lời net12k44
  Hiện bài gốc

cảm ơn sự giúp đỡ bạn rất nhiều! Mình sẽ rút kinh nghiệm :)