k>0 cho đỉnh vj khác với đỉnh kề của nó 6.Lặp lại đến khi tô màu xong
3.6 Bài toán mạng giao thông:
(Đề thi chọn học sinh giỏi các trường chuyên khu vực duyên hải và đồng bằng bắc bộ năm 2014)
a. Mô tả bài toán
Trong một mạng giao thông liên thông gồm N nút và M đoạn đường giữa một số cặp nút, mỗi đoạn đường đều có giới hạn tải trọng xe. Một xe cần đi từ nút 1 đến nút N. Cần chọn cho xe một hành trình sao cho theo hành trình đó, xe có trọng tải được phép lớn nhất.
Input: được cho bởi file TRANSPO.INP trong đó dòng thứ nhất ghi hai số N, M. Trong M dòng tiếp theo, mỗi dòng ghi ba số nguyên dương, hai số đầu là tên hai nút có đoạn đường nối trực tiếp, số thứ ba là tải trọng cho phép.
Output: Ghi ra dòng thứ nhất của file TRANSPO.OUT tải trọng lớn nhất, dòng thứ hai ghi số S là số nút trên hành trình từ 1 đến N, dòng thứ ba ghi S nút theo thứ tự trên hành trình. Các hạn chế 2 ≤ n ≤ 100 000 1 ≤ m ≤ 200 000 1 ≤ w ≤ 10 000 TRANSPO.INP 6 9 1 2 5 1 4 3 2 4 2 2 3 6 4 5 4 3 4 5 3 5 1 3 6 3 5 6 5 TRANSPO.OUT 4 6 1 2 3 4 5 6
65
b. Giải thuật
Áp dụng tư tưởng thuật toán Dijkstra tìm cách đi tốt (tải trọng cho phép (TTCP) lớn nhất) từ 1 đến N. Với mỗi cặp đỉnh I, J, ký hiệu C[I,J] = tải trọng cho phép nếu có cạnh (I,J) và = 0 nếu không có cạnh (I,J). Với mỗi đỉnh I, ký hiệu D[I] là TTCP khi đi từ 1. Các D[I] khởi tạo = 0 trừ D[1] cho lớn tùy ý.
Thuật toán này có hai pha.
- Pha 1. Giả sử Last là đỉnh vừa có đường đi tốt từ 1 đến, với mỗi đỉnh I chưa có đường đi tốt từ 1 đến, so sánh TTCP của đường đi cũ với TTCP của đường đi từ 1 đến I vòng qua Last, nếu D[I]<Min(D[last], C[last,I]) thì thay D[I] bằng Min(D[last], C[last,I]).
- Pha 2. Trong số các đỉnh I chưa có đường đi tốt từ 1 đến, chọn làm Last mới đỉnh có D lớn nhất.
Thuật toán được mô tả chi tiết trong phụ lục 1 (Tên chương trình Mang_giao_thong.Pas)
66
KẾT LUẬN
Thuật toán là một mảng rất rộng, nếu đi hầu hết tất cả vấn đề của thuật toán đó là một khối lượng kiến thức khổng lồ, các vấn đề ứng dụng của thuật toán cũng rất nhiều, phong phú và đa dạng. Trong luận văn đã tập trung nghiên cứu, trình bày những kiến thức cơ bản về thuật toán và ứng dụng của thuật toán vào việc giải một số bài toán tin học, đề thi học sinh giỏi, đề thi olympic. Qua đó luận văn đã đạt được một số kết quả như sau:
Về lý thuyết
Luận văn tập trung nghiên cứu các kiến thức chung nhất về thuật toán và độ phức tạp của thuật toán, một số thuật toán trên mô hình đồ thị. Luận văn đã phân tích kỹ về các thuật toán của các bài toán ứng dụng.
Về ứng dụng
Luận văn đã phân tích và cài đặt các thuật toán của các bài toán ứng dụng trong thi học sinh giỏi, Olympic Tin học.
Phạm vi và khả năng áp dụng
Luận văn là một tài liệu tham khảo tốt cho giáo viên và học sinh trong các trường phổ thông.
Hƣớng nghiên cứu tiếp theo
Tối ưu hóa các thuật toán và cài đặt nhiều thuật toán cho các bài toán ứng dụng, đồng thời bổ sung một số bài toán mới trong các kỳ thi chọn học sinh giỏi cấp tỉnh, cấp quốc gia và Olympic, …
67