Thursday, September 29, 2005

Ứng dụng thuật toán Bread First Search tìm đường đi ngắn nhất

Đầu bài của bài toán mà tôi cần giải quyết như sau:

Cho một ma trận mxn điểm với các phần tử chỉ nhận các giá trị 0 hoặc 1. Các điểm có giá trị 1 sẽ tạo thành đường đi, các điểm có giá trị 0 tạo thành chướng ngại vật.

Cho một tập các điểm thuộc ma trận trên, tìm đường đi ngắn nhất từ một điểm đến các điểm còn lại trong tập.

Sau khi có các đường đi ngắn nhất, lọc ra một điểm số điểm nằm trên các đường đi đó, những điểm này được gán nhãn. Xuất các nhãn đó ra Excel vào các sheet.

Chương trình về cơ bản đã hoàn thành (chạy đúng) nhưng còn cần refactor và refine lại một số phần.

Source code

Cập nhật 5:44 PM, Sep. 29, 2005:
Thực ra thì chương trình còn có nhiều phần còn ngớ ngẩn. Chẳng hạn, các class Node, FilterNode còn trùng lặp; đoạn mã chương trình chạy (class FilterTest) còn chộp giật thêm linh tinh; một số method trong class BFSAlgorithm đáng ra phải được đẩy ra ngoài... Tôi sẽ cố gắng sửa đổi chương trình trong thời gian ngắn nhất.

Cập nhật 12:32 PM, Sep. 30, 2005:
Chương trình nên được bổ xung class Matrix để thể hiện ma trận các Node thay vì dùng mảng 2 chiều như hiện giờ. Khi đó chuyển 2 method get() từ class BFSAlgorithm sang class Matrix.

Để đơn giản hóa cũng có thể gộp 2 class Node và FilterNode lại làm một.

Tổ chức lại class Utilities.

No comments: