Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 41 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
41
Dung lượng
431,95 KB
Nội dung
ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN BÁO CÁO PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC TRONG TIN HỌC ĐỀ TÀI: MỘT SỐ THUẬT TOÁN CHỌN LỌC TRONG GIẢI BÀI TOÁN TIN HỌC GVHD: GS TSKH HOÀNG VĂN KIẾM HVTH: CN LÊ THANH TRỌNG KHÓA: 06 MSHV: CH1101052 LỚP: CH CNTT K6 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com TP Hồ Chí Minh, tháng năm 2012 MỤC LỤC LỜI CẢM ƠN Phần I: GIỚI THỆU Phần II: THUẬT TOÁN THAM LAM Giới thiệu phương pháp Năm thành phần giải thuật tham lam Hai thành phần định tới định tham lam 3.1 Tính chất lựa chọn tham lam 3.2.Cấu trúc tối ưu 4.Mơ hình Bài toán minh họa: Bài toán Xếp việc 5.1 Mơ tả tốn 5.2 Thuật toán 5.3 Chương trình minh họa 10 Phần III : THUẬT TOÁN QUAY LUI 16 Giới thiệu phương pháp 16 Mô hình cho tốn 16 Bài toán minh họa: Tìm đường mê cung 19 3.1 Mơ tả tốn 19 3.2 Thuật toán 20 3.3 Chương trình minh họa 21 Phần IV: THUẬT TOÁN QUY HOẠCH ĐỘNG 28 Giới thiệu phương pháp 28 Sơ đồ cho toán 28 Bài tóan minh họa: Tìm đường ngắn 28 3.1.Mơ tả tốn 28 3.2.Thuật giải 30 3.3 Chương trình minh họa 33 Phần V: KẾT LUẬN 39 Phần VI: TÀI LIỆU THAM KHẢO 39 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƯƠNG 1: LỜI CẢM ƠN Em xin gửi lời cảm ơn chân thành đến GS.TSKH Hoàng Văn Kiếm, người truyền đạt kiến thức quý báu không lý thuyết mà hướng dẫn cách thức vận dụng chúng vào việc nghiên cứu khoa học tin học Em xin chân thành cảm ơn Thầy hướng dẫn Thầy trình thực báo cáo Xin chân thành cảm ơn giúp đỡ anh chị, bạn bè người thường xuyên trao đổi, thảo luận đóng góp ý kiến cho tơi vấn đề liên quan thời gian qua Mặc dù cố gắng thực báo cáo cách tốt chắn không tránh khỏi thiếu sót Mong q Thầy bạn góp ý Tôi xin chân thành cảm ơn! Sinh viên thực Lê Thanh Trọng MSHV: CH1101052 Lớp: CH CNTT K6 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C CHƯƠNG 2: Phần I: GIỚI THỆU CHƯƠNG 3: Thuật toán thủ tục tính tốn xác định cách hợp lý đắn nhằm giải giải toán cụ thể Thuật tốn bao gồm tập giá trị nhập vào (input) tập giá xuất (output) Vì thuật tốn tập bước tính tốn có thứ tự nhằm chuyển input thành output Chúng ta xem thuật tốn cơng cụ dành để giải tốn xác định trước Mơ tả tốn thành phần biểu diễn mối quan hệ input output Chúng ta biết máy tính thực việc tính tốn vơ nhanh có nhớ lớn Một câu hỏi đặt có nên học tìm hiểu thuật tốn khơng? Câu trả lời chắn “Có” đơn giản luôn muốn giải pháp giải vấn đề máy tính có kết cuối kết xác giải pháp khả thi dễ thực khả nhớ máy tính có giới hạn Vì mà khơng gian thời gian hai yếu tố quan trọng thuật toán Trong giải vấn đề, cần hòa hợp hai yếu tố cách linh hoạt nhằm thỏa mãn yêu cầu định đáp ứng tốt vấn đề đặt Một tốn tin hiểu khó ta sử dụng thuật giải nảy sinh đầu vừa biết nội dung tốn ta thu kết sai lời giải thu khơng hữu hiệu theo nghĩa chương trình địi hỏi nhiều nhớ chạy lâu Những thuật giải nảy sinh đầu thường gọi thuật giải tự nhiên Dĩ nhiên, khái niệm tương đối Nếu bạn nắm vững nhiều dạng thuật giải thử sức với nhiều tốn khó đến lúc thuật giải tự nhiên bạn đáng tin cậy Nội dung báo cáo ba phương pháp kinh điển, hay ứng dụng nhiều tin học Đó phương pháp tham lam, phương pháp quay lui quy hoạch động Các phương pháp không vạn theo nghĩa khơng thể dùng chúng để giải tốn Trong thực tế, phương pháp vạn khơng hữu hiệu Tuỳ theo nội dung tốn mà ta chọn phương pháp phù hợp Đó điểm khó, địi hỏi bạn đọc q trình tìm tịi tích luỹ kinh nghiệm Các kĩ thuật giải minh hoạ qua toán cụ thể mơ tả ngơn ngữ C# Hình thức phát biểu tốn suy cho khơng quan trọng Các kĩ thuật lập trình phương pháp xây dựng LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C thuật giải cho tốn thường dùng rộng rãi q trình thiết kế cài đặt phần mềm ứng dụng thực tiễn, việc sớm làm chủ tri thức thật cần thiết Môi trường lập trình mang tính minh hoạ Khi biết thuật tốn, việc thể thuật tốn mơi trường lập trình cụ thể chắn việc làm quen thuộc bạn đọc Chúc bạn tìm “cái mới” riêng cho mình! Sau bước thường vận dụng trình giải toán tin: Bước bước quan trọng hiểu rõ nội dung toán Đây yêu cầu quen thuộc người làm toán Để hiểu toán theo cách tiếp cận tin học ta phải gắng xây dựng số thí dụ phản ánh yêu cầu đề đầu thử giải thí dụ để hình thành dần hướng thuật tốn Bước thứ hai dùng ngơn ngữ quen thuộc, tốt ngơn ngữ tốn học đặc tả đối tượng cần xử lí mức độ trừu tượng, lập tương quan, xây dựng hệ thức thể quan hệ đại lượng cần xử lí Bước thứ ba xác định cấu trúc liệu để biểu diễn đối tượng cần xử lí cho phù hợp với thao tác thuật toán.Trong bước ta tiếp tục làm mịn dần đặc tả theo trình tự từ xuống, từ trừu tượng đến cụ thể, từ đại thể đến chi tiết Bước cuối sử dụng ngơn ngữ lập trình chọn để viết chương trình hồn chỉnh Ở bước ta tiến hành theo kĩ thuật từ lên, từ thao tác nhỏ đến thao tác tổ hợp Điều quan trọng nên xây dựng thủ tục cách khoa học có chủ đích nhằm kiểm tra tính tin cậy chương trình thu thực số cải tiến Bên cạnh phương pháp đề cập nhiều phương pháp hay khác Nhưng thời gian khả có hạn, thân nhận thấy phương pháp có tính chất hay gần gũi, khả ứng dụng cao nên tơi xin trình bày hiểu biết phạm vi cho phép Trong phương pháp gồm có giới thiệu phương pháp, mơ hình hay sơ đồ phương pháp tốn ví dụ minh họa cho phương pháp với code mô tả toán LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C CHƯƠNG 4: Phần II: THUẬT TOÁN THAM LAM Giới thiệu phương pháp Phương pháp tham lam gợi ý tìm trật tự hợp lí để duyệt liệu nhằm đạt mục tiêu cách chắn nhanh chóng Thơng thường, liệu duyệt theo hai trật tự tăng giảm dần theo tiêu Một số tốn địi hỏi dạng thức cải biên hai dạng nói Phương pháp tham lam phương pháp thường dùng để giải toán tối ưu Phương pháp tiến hành nhiều bước Tại bước, theo lựa chọn đó( xác định hàm chọn), tìm lời giải tối ưu cho toán nhỏ tương ứng Lời giải toán bổ sung bước từ lời giải toán Chẳng hạn áp dụng giải thuật tham lam với tốn hành trình người bán hàng ta có giải thuật sau: "Ở bước đến thành phố gần thành phố nhất" Lời giải xây dựng có lời giải tối ưu cho toán? Các lời giải phương pháp tham lam thường chấp nhận theo điều kiện đó, chưa tối ưu Cho trước tập A gồm n đối tượng, ta cần phải chọn tập S A Với tập S chọn thỏa mãn yêu cầu toán, ta gọi nghiệm chấp nhận Một hàm mục tiêu gắn với nghiệm chấp nhận với giá trị Nghiệm tối ưu nghiệm chấp nhận mà hàm mục tiêu đạt giá nhỏ nhất( lớn nhất) Đặc trưng tham lam phương pháp thể bởi: bước việc xử lý tuân theo lựa chọn trước, khơng kể đến tình trạng khơng tốt xảy thực lựa chọn lúc đầu 4.1 Năm thành phần giải thuật tham lam Một tập hợp ứng viên (candidate), để từ tạo lời giải Một hàm lựa chọn, để theo lựa chọn ứng viên tốt để bổ sung vào lời giải Một hàm khả thi (feasibility), dùng để định ứng viên dùng để xây dựng lời giải Một hàm mục tiêu, ấn định giá trị lời giải lời giải chưa hoàn chỉnh Một hàm đánh giá, ta tìm lời giải hồn chỉnh LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C 4.2 Hai thành phần định tới định tham lam 4.2.1 3.1 Tính chất lựa chọn tham lam Chúng ta lựa chọn giải pháp cho tốt thời điểm sau giải tốn nảy sinh từ việc thực lựa chọn vừa Lựa chọn thuật toán tham lam phụ thuộc vào lựa chọn trước Nhưng khơng thể phụ thuộc vào lựa chọn tương lai hay phụ thuộc vào lời giải toán Thuật toán tiến triển theo kiểu thực chọn lựa theo vịng lặp, lúc thu nhỏ tốn cho toán nhỏ Đấy khác biệt thuật toán giải thuật quy hoạch động Giải thuật quy hoạch động duyệt hết ln đảm bảo tìm thấy lời giải Tại bước thuật toán, quy hoạch động đưa định dựa định bước trước, xét lại đường bước trước hướng tới lời giải Giải thuật tham lam định sớm thay đổi đường thuật tốn theo định đó, không xét lại định cũ Đối với số tốn, thuật tốn khơng xác 4.2.2 3.2.Cấu trúc tối ưu Một tốn gọi "có cấu trúc tối ưu", lời giải tối ưu toán chứa lời giải tối ưu tốn lớn 4.3 4.Mơ hình LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C 4.4 Bài toán minh họa: Bài tốn Xếp việc 4.4.1 5.1 Mơ tả tốn Có N cơng việc cần thực máy tính, việc đòi hỏi máy Với việc ta biết thời hạn phải nộp kết thực sau hồn thành việc tiền thưởng thu nộp kết trước thời điểm quy định Chỉ có máy tính tay, lập lịch thực đủ N công việc máy tính cho tổng số tiền thưởng thu lớn thời gian hoạt động máy nhỏ Giả thiết máy khởi động vào đầu ca, thời điểm t = tắt máy sau hồn thành đủ N cơng việc Dữ liệu vào: tệp văn viec.inp: - Dòng số N LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C - N dòng tiếp theo: việc mô tả hai số tự nhiên, số thứ thời hạn giao nộp, số thứ hai tiền thưởng Các số cách dấu cách Thí dụ: viec.inp Ý nghĩa: Cho biết có việc với thông tin sau: - 15 thưởng 15 (ngàn đồng); - 10 100 Việc thứ phải nộp không muộn thời điểm (giờ) với tiền Việc thứ hai phải nộp không muộn thời điểm (giờ) với tiền thưởng 10 (ngàn đồng); - 27 Việc thứ ba phải nộp không muộn thời điểm (giờ) với tiền thưởng 100 (ngàn đồng); - Việc thứ tư phải nộp không muộn thời điểm (giờ) với tiền thưởng 27 (ngàn đồng) Dữ liệu ra: tệp văn viec.out: - N dòng đầu tiên, dòng thứ t ghi số tự nhiên i cho biết việc thứ i làm t - Dòng cuối ghi tổng số tiền thu Với thí dụ trên, tệp viec.out sau: viec.out Ý nghĩa: - nên thưởng 27; - Giờ thứ thực việc nộp hạn Giờ thứ thực việc nộp trước hạn nên thưởng 10; - 137 Giờ thứ thực việc nộp trước hạn nên thưởng 100; - Giờ thứ thực việc 1; - Tổng tiền thưởng thu hoàn thành hạn ba việc 4, 27 + 10 + 100 = 137 4.4.2 5.2 Thuật tốn Ta ưu tiên cho việc có tiền thưởng cao, ta việc giảm dần theo tiền thưởng Với việc k ta biết thời hạn giao nộp việc h = t[k] Ta xét trục thời gian b Nếu h trục bận việc khác ta tìm từ thời điểm h trở trước thời điểm thực việc k Nếu tìm thời điểm m vậy, ta đánh dấu mã số việc trục thời gian b, LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C if (k < 1) return false; // het cach if ((phong = Tim()) > 0) { // Tien them buoc // nha chi, danh dau v[++k] = phong; d[phong] = 1; } else k; // lui } while (true); } // Tu phong v[k] tim duoc //mot duong sang phong khac static int Tim() { for (int j = 1; j 0) //co hanh lang toi j return j; return 0; } } 26 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C } 27 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C CHƯƠNG 6: Phần IV: THUẬT TOÁN QUY HOẠCH ĐỘNG 6.1 Giới thiệu phương pháp Các tốn quy hoạch động chiếm vị trí quan trọng tổ chức hoạt động sản xuất Chính lẽ mà kì thi học sinh giỏi quốc gia quốc tế thường gặp loại tốn Thơng thường bạn dùng phương pháp quay lui, vét cạn cho toán quy hoạch động vét tập liệu nhỏ, kích thước chừng vài chục byte Nếu tìm hệ thức thể chất quy hoạch động toán khéo tổ chức liệu ta xử lí tập liệu lớn Có thể tóm lược ngun lí quy hoạch động Bellman phát biểu sau: Quy hoạch động lớp toán mà định bước thứ i phụ thuộc vào định bước xử lí trước sau Để giải tốn quy hoạch động, ta theo sơ đồ sau Sơ đồ cho tốn Ta có sơ đồ giải tốn quy hoạch động gồm bước sau: Lập hệ thức: Lập hệ thức biểu diễn tương quan định bước xử lí với bước xử lí trước Khi có hệ thức tương quan xây dựng thuật giải, nhiên hệ thức thường biểu thức đệ quy, dễ gây tượng tràn miền nhớ ta tổ chức chương trình trực tiếp đệ quy Tổ chức liệu chương trình: Tổ chức liệu tính tốn dần theo bước Nên tìm cách khử đệ quy Trong tốn quy hoạch động thuộc chương trình phổ thơng thường đòi hỏi vài mảng hai chiều Làm tốt: Làm tốt thuật toán cách thu gọn hệ thức quy hoạch động giảm kích thước miền nhớ 6.2 Bài tóan minh họa: Tìm đường ngắn 6.2.1 3.1.Mơ tả tốn 28 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C Cho đồ thị có hướng gồm n đỉnh mã số từ n với cung (u, v) có hướng từ đỉnh u đến đỉnh v có chiều dài thể đường nối từ đỉnh u đến đỉnh v Viết chương trình tìm đường ngắn từ đỉnh s cho trước tới đỉnh lại đồ thị Dữ liệu vào ghi tệp văn tên DIJ.INP có cấu trúc sau: - Dịng đầu ghi hai số tự nhiên n s cách dấu cách, n số lượng đỉnh đồ thị, s số hiệu đỉnh xuất phát - Từ dòng thứ hai ghi độ dài đường từ đỉnh i đến đỉnh 1, 2, , n; i = n Giá trị cho biết khơng có cung nối hai đỉnh tương ứng Với đỉnh i = n, cung (i, i) xem không tồn ghi chiều dài Các số dòng cách qua dấu cách Dạng liệu cho gọi ma trận kề đồ thị Thí dụ sau cho biết đồ thị có bảy đỉnh, cần tìm đường ngắn từ đỉnh tới đỉnh lại đồ thị Cung (2, 1) có chiều dài 4, DIJ.INP 1 72 0000000 4010005 0000001 0000020 5 0003000 1000005 0001000 Dữ liệu ghi tệp văn DIJ.OUT gồm n dịng Thơng tin đường ngắn từ đỉnh s đến đỉnh lại ghi dòng Số dòng chiều dài đường Nếu khơng tồn đường ghi giá trị Tiếp đến, trường hợp có đường từ đỉnh s đến đỉnh i ghi dãy đỉnh xuất đường đi, đỉnh đầu tiên, dĩ nhiên s, đỉnh cuối i Đường từ đỉnh i tới đỉnh coi khơng tồn tại, i = n Thí dụ cho ta kết DIJ.OUT 29 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C 421 - Đường ngắn từ đỉnh đến đỉnh có chiều dài 4, cách đi: - Đường ngắn từ đỉnh đến đỉnh 2: khơng có (thực ra, theo lẽ 123 32374 thường có đường chiều dài 0) - Đường ngắn từ đỉnh đến đỉnh có chiều dài 1, cách đi: - Đường ngắn từ đỉnh đến đỉnh có chiều dài 3, cách đi: 3 523746 2237 - Đường ngắn từ đỉnh đến đỉnh 5: khơng có - Đường ngắn từ đỉnh đến đỉnh có chiều dài 5, cách đi: 23746 - Đường ngắn từ đỉnh đến đỉnh có chiều dài 2, cách đi: 237 6.2.2 3.2.Thuật giải Thuật giải quy hoạch động trình bày mang tên Dijkstra, nhà tin học lỗi lạc người Hà Lan Bản chất thuật toán sửa đỉnh, xác sửa trọng số đỉnh Theo sơ đồ giải toán quy hoạch động trước hết ta xây dựng hệ thức cho toán Gọi p(i) độ dài đường ngắn từ đỉnh s đến đỉnh i, i n Ta thấy, hàm p(i) phải thoả tính chất sau: - p(s) = 0: đường ngắn từ đỉnh xuất phát s đến đỉnh có chiều dài - Với i s, muốn đến đỉnh i ta phải đến đỉnh sát trước đỉnh i Nếu j đỉnh sát trước đỉnh i, theo điều kiện đầu ta phải có a[j,i ] > Trong a[j, i] chiều dài cung (j i) Trong số đỉnh j sát trước đỉnh i ta cần chọn đỉnh nào? Kí hiệu path(x, y) đường ngắn qua đỉnh, xuất phát từ đỉnh từ x kết thúc đỉnh y x Khi đường từ s đến i chia làm hai đoạn, đường từ s đến j cung (j i): path(s,i) = path(s,j)+ path(j,i) path(j, i) gồm cung: path(j,i) = (j i) 30 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C Do p(i) p(j) phải ngắn nhất, tức phải đạt trị min, ta suy điều kiện để chọn đỉnh j sát trước đỉnh i tổng chiều dài đường từ s đến j chiều dài cung (j i) ngắn Ta thu hệ thức sau: p(i) = {p(j)+a[j,i ] | a[j,i ] > 0, j = n } Để ý điều kiện a[j, i] > cho biết j đỉnh sát trước đỉnh i Điều tài tình Dijkstra cung cấp thuật tốn tính đồng thời đường ngắn từ đỉnh s đến đỉnh lại đồ thị Thuật tốn sau Thuật tốn thực n lần lặp, lần lặp ta chọn xử lí đỉnh đồ thị Tại lần lặp thứ k ta khảo sát phần đồ thị gồm k đỉnh với cung liên quan đến k đỉnh chọn phần đồ thị Ta gọi phần đồ thị thu bước xử lý thứ k đồ thị ban đầu kí hiệu G(k) Với đồ thị ta hồn tất giải tìm đường ngắn từ đỉnh xuất phát s đến đỉnh lại G(k) Chiều dài thu ta gán cho đỉnh i trọng số p[i] Ngoài ra, để chuẩn bị cho bước ta đánh giá lại trọng số cho đỉnh kề sau đỉnh G(k) Khởi trị: Gán trọng số p[i] = cho đỉnh, trừ đỉnh xuất phát s, gán trị p[s] = Ý nghĩa thao tác đứng đỉnh xuất phát s đồ thị G(0), ta coi chưa thăm mảnh đồ thị nên ta chưa có thơng tin đường từ s đến đỉnh cịn lại đồ thị ban đầu Nói cách khác ta coi chưa có đường từ s đến đỉnh khác s đó, độ dài đường từ s đến đỉnh Giá trị chọn chương trình là: MAXWORD = 65535 Tại bước lặp thứ k ta thực thao tác sau: - Trong số đỉnh chưa xử lí, tìm đỉnh i có trọng số - Với đỉnh j chưa xử lí kề sau với đỉnh i, ta chỉnh lại trọng số p[j] đỉnh theo tiêu chuẩn sau: Nếu p[i] + a[i, j] < p[j] gán cho p[j] giá trị mới: p[j]=p[i]+a[i,j] Ý nghĩa thao tác là: độ dài đường path(s, j) đồ thị G(k - 1) không qua đỉnh i mà lớn độ dài đường path(s, j) có qua đỉnh i cập nhật lại theo đường 31 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C - Sau cập nhật ta cần lưu lại vết cập nhật lệnh gán before[i] = j với ý nghĩa là, đường ngắn từ đỉnh s tới đỉnh j cần qua đỉnh i - Đánh dấu đỉnh i xử lí Như vậy, bước lặp ta xử lí đỉnh i có trọng số đánh dấu đỉnh (* -Thuat toan Dijkstra *) Void Dijkstra() { int i,k,j,n; for(k=0; k } d[i] := 1; {danh dau dinh i la da xu li } for(i=0; i ) {co duong di i -> j } if ([i] + a[i,j] < p[j] ) { // sua dinh p[j] := p[i] + a[i,j]; before[j] := i; } } 32 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TỐN TIN H C } Thuật tốn chứa hai vịng for lồng có độ phức tạp n2 Sau hồn thành thuật tốn Dijkstra ta cần gọi thủ tục Ket (kết) để ghi lại kết theo yêu cầu đầu sau Với đỉnh i = n ta cần ghi vào tệp output chiều dài đường từ s đến i bao gồm giá trị p[i] đỉnh nằm đường Chú ý p[i] nhận giá trị khởi đầu tức MAXWORD = 65535 tức khơng có đường từ s đến i 6.2.3 3.3 Chương trình minh họa using System; using System.IO; using System.Collections; namespace SangTaoT1 { /* -* Thuat toan Dijkstra * Tim moi duong ngan nhat tu mot dinh * den moi dinh lai * -*/ class Dijkstra { const string fn = "Dij.inp"; const string gn = "Dij.out"; 33 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C static int n = 0; // so dinh static int s = 0; // dinh xuat phat // c[i,j] ma tran ke cho biet // dai cung (i,j) static int[,] c; static int[] d; // danh dau dinh static int[] t; // tro truoc static int[] p; // so dinh static void Main() { Run(); Console.ReadLine(); } // Main static void Run() { Doc(); Show(); Dij(); Ghi(); Test(); Console.WriteLine("\n Fini"); Console.ReadLine(); } // Kiem tra lai tep output static void Test() tự viết 34 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C static void Ghi() { StreamWriter g = File.CreateText(gn); for (int i = 1; i 0; j) g.Write(d[j] + " "); g.WriteLine(); } g.Close(); } // Lan nguoc duong di // tu dinh v den dinh s // ghi tam vao mang d static int InvPath(int v) { int i = 0; 35 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com M T S THU T TOÁN CH N L C TRONG GI I BÀI TOÁN TIN H C { d[++i] = v; v = t[v]; } while (v != 0); return i; } static void Dij() { for (int i = 0; i v t[v] = u; } } } // Tim so cac dinh chua // xu li mot dinh j co p static int Minp() { int jmin = 0; for (int i = 1; i