Rènluyệnkỹduyệtđồthị Để rènluyệnkỹduyệtđồthị , xin giới thiệu cách giải vài toán sau đây: Bài ĐÈN TRANG TRÍ Rôn mua đèn trang trí gồm n đèn (1 ≤ n ≤ 000) Mỗi đèn có công tắc để bật hay tắt riêng đèn Mỗi giây Rôn bật tắt bóng đèn tùy chọn Ban đầu tất bóng trạng thái tắt Một cấu hình đèn trạng thái số đèn bật sáng, đèn lại – tắt Rôn đặc biệt thích số cấu hình chúng phù hợp với khung cảnh phòng Rôn.Mỗi trạng thái đèn biểu diễn xâu n ký tự từ tập {0, 1} Ký tự thứ i xác định trạng thái đèn thứ i, tương ứng với trạng thái đèn tắt, trạng thái đèn bật sáng Ví dụ, với n = Rôn đặc biệt thích cấu hình {1, 0, 1}, {0, 1, 0}, {1, 1, 1} Để kiểm tra xem cấu hình thích hợp Rôn phải bật tắt số đèn Trong trường hợp Rôn cần giây để xem xét hết cấu hình Yêu cầu: Cho biết n m, m – số cấu hình khác mà Rôn đặc biệt yêu thích (1 ≤ m ≤ 15) Hãy xác định thời gian tối thiểu cần thiết để kiểm tra hết tất trạng thái mà Rôn quan tâm Dữ liệu: Vào từ file văn GARLAN.INP: • • Dòng chứa số nguyên n m, Mỗi dòng m dòng chứa xâu n ký tự xác định cấu hình Rôn yêu thích Kết quả: Đưa file văn GARLAN.OUT số nguyên – thời gian tối thiểu kiểm tra cấu hình Ví dụ: GARLAN.INP 3 GARLAN.OUT 101 010 Lời giải : - 111 Mỗi trạng thái coi đỉnh đồthị (trạng thái ban đầu đỉnh số ) Trong số cạnh chi phí chuyển từ trạng thái sang trạng thái - Bìa toán trở thành tìm đường từ qua đỉnh với tổng trọng số nhỏ • Gọi canh (u,v,w), u,v đỉnh , w trọng số Trong ví dụ ta có cạnh (0,1,2) , (0,2,1) , (0,3,3) , (1,2,3) , (1,3,1) , (2,3,2) Ta đường tốt 0-2-1-3 ( 0-2-3-1) với chi phí = Bài BẮC CẦU Chính phủ quốc đảo Oceani định xây dựng m cầu nối n đảo mình, tạo mạng lưới giao thông đường cho phép từ dảo tới đảo khác đường (trực tiếp qua số đảo trung gian) Mỗi cầu nối đảo khác cho phép lại hai chiều Các đảo đánh số từ đến n-1 Bị hạn chế kinh phí nguồn nhân lực, người ta định xây dựng cầu lên kế hoạch xác định cầu trình tự xây Mỗi cầu xác định cặp đảo u, v mà nối Trong trình thực kế hoạch đến lúc từ đảo đến đảo khác đường Ví dụ, Oceani có đảo người ta định xây dựng cầu theo trình tự – 1, – 2, – 2, – 3, – Tuy vậy, không cần chờ đợi đến hoàn thành kế hoạch xây cầu, sau cầu thứ xây xong tất đảo nối liền đường Yêu cầu: Cho n, m cầu dự kiến xây Thông tin cầu đưa theo trình tự xây dựng Hãy xác định số cầu tối thiểu cần xây theo kế hoạch để từ đảo đến đảo khác đường Dữ liệu: Vào từ file văn BRIDGES.INP: • • Dòng chứa số nguyên n m (1 ≤ n ≤ 106, ≤ m ≤ 5×106), Dòng thứ i m dòng chứa số nguyên u v xác định cầu thứ i cần xây Kết quả: Đưa file văn BRIDGES.OUT kết tìm dạng số nguyên Ví dụ: BRIDGES.INP BRIDGES.OUT 2 3 Lời giải : - Tìm đáp số tìm kiếm nhị phân ( Ds = n-1 , ds max = m ) Với ds dự đoán , ta việc kiểm tra tính liên thông với danh sách cạnh từ đến ds Bài Đường Robot Một bảng hình chữ nhật có kích thước MxN (M,N nguyên dương không lớn 100) chia thành ô vuông đơn vị đường thẳng song song với cạnh Một số ô vuông đặt vật cản Từ ô vuông, Robot đến ô vuông kề cạnh với ô vuông vật cản Hỏi Robot bắt đầu xuất phát từ ô vuông vật cản thuộc dòng K, cột L đến ô vuông vật cản thuộc dòng H, cột O hay không? Nếu có đường qua ô vuông Dữ liệu vào tệp văn BAI3.INP có cấu trúc: - Dòng ghi chữ số M, N, K, L, H, O Các số ghi cách ký tự trống; - M dòng tiếp theo, dòng ghi N số tuỳ thuộc vào ô vuông tương ứng bảng hình chữ nhật nêu có vật cản hay không (ghi số có vật cản); số dòng ghi liên tiếp Dữ liệu tệp văn BAI3.OUT có cấu trúc: Nếu Robot từ ô vuông thuộc dòng K, cột L đến ô vuông thuộc dòng H, cột O thì: - Dòng ghi ‘Co duong di ‘; - Các dòng tiếp theo, dòng ghi số số dòng số cột ô vuông đường tìm từ ô vuông thuộc dòng K, cột L đến ô vuông thuộc dòng H, cột O mà qua ô vuông Hai số dòng ghi cách ký tự trống; - Ngược lại, Robot từ ô vuông thuộc dòng K, cột L đến ô vuông thuộc dòng H, cột O ghi ‘Khong co duong di’ Ví dụ 1: robot.inp: robot.out: 473426 Co duong di 1000000 34 0010100 35 0000000 36 1101000 26 robot.inp: robot.out: 472213 Khong co duong di Ví dụ 2: 1010000 0010100 0100000 1101000 Phân tích: Yêu cầu toán thực chất tìm đường từ ô [K,L] đến ô [H,O] cho qua ô vuông Ta dễ thấy thuật toán để xử lý cách hợp lý thuật toán Loang Ta bắt dầu “loang” từ ô [K,L], “loang” đến ô [H,O] có đường đi, ngược lại đường Hàng đợi phục vụ “loang” thể mảng chiều Q:Array[1 2,Mmax*Max] of Byte; hàng thứ Q để lưu thông tin số hàng, hàng thứ lưu thông tin số cột ô nạp vào Q Mảng A lưu thông tin tình trạng ô - có vật cản hay không bảng hình chữ nhật chứa ô vuông Mảng P dùng để đánh dấu ô “loang” đến; đồng thời để phục vụ cho việc truy xuất đường sau nên ô [i,j] “loang” đến P[i,j] gán giá trị r (r giá trị tương ứng với hướng mà ô trước “loang” đến, hướng tương ứng với giá trị k tuỳ theo quy định, ví dụ r = - sang phải, - xuống, - sang trái, - lên) Sau thực xong việc “loang”, P[H,O] = điều có có nghĩa ô [H,O] chưa “loang” đến (không có đường đi), P[H,O] = r (r=1 - loang theo hướng) dựa vào hướng “loang” đến mà ta tìm ô trước đó, ta lại dựa vào giá trị k ô tìm ta tìm ô trước trình kết thúc tìm ô [K,L] Sau “loang” xong giá trị phần tử mảng Q không giá trị sử dụng nên ta dùng mảng Q phục vụ cho việc truy xuất kết Bài Gặp gỡ hai Robot Trên lưới ô vuông MxN (M,N cuoi1 then ST:=True; {ST=True Q1 rỗng, kết thúc “loang”} End; Việc “loang” theo lớp Robot B tương tự Robot A khác chổ “loang” đến ô [h,c] phải xét dấu hiệu B[h,c] xem thử gặp Robot A chưa: If B[h,c] then {Nếu ô [h,c] Robot B gặp Robot A thì} Begin lk:=k; {Lưu lại giá trị tương ứng với hướng “loang” để lấy kết quả} hm:=h; {Lưu lại số hàng ô mà Robot gặp để lấy kết quả} cm:=c; {Lưu lại số cột ô mà Robot gặp để lấy kết quả} TT:=True; {Dấu hiệu dừng “loang” Robot gặp nhau} Exit; End; Sở dĩ ta phải lưu lại giá trị tương ứng với hướng “loang” (lk:=k) ô gặp [h,c] Robot A “loang” đến trước nên gán giá trị A[h,c] giá trị tương ứng với hướng “loang” đến nên Robot B “loang” đến ô [h,c] buộc ta phải lưu lại giá trị tương ứng với hướng “loang” vào biến lk để sau truy xuất đường Robot B Quá trình “loang” theo lớp Robot thực sau: Procedure Loang_lop; Begin TT:=False; ST:=False; While (ST=False) and (TT=False) Begin FillChar(B,SizeOf(B),False); {Đánh dấu theo lớp loang} Loang1; Loang2; End; End; Lệnh đánh dấu theo lớp “loang” vị trí trên: FillChar(B,SizeOf(B),False) quan trọng Robot B gặp Robot A ô [h,c] B[h,c] = True thời điểm lớp “loang” Robot A lớp “loang” với Robot B Còn B[h,c] = True lớp “loang” trước Robot A kết luận Robot gặp Robot di chuyển khập khểnh không đồng thời Việc lấy kết dựa vào giá trị biến TT: TT=True - Hai Robot gặp nhau, TT=False - Hai Robot không gặp Trong trường hợp gặp dựa vào việc lưu thông tin ô gặp vào biến hm ,cm (hm - số hàng, cm - số cột) ta truy xuất đường Robot ... Robot gặp Robot di chuyển khập khểnh không đồng thời Việc lấy kết dựa vào giá trị biến TT: TT=True - Hai Robot gặp nhau, TT=False - Hai Robot không gặp Trong trường hợp gặp dựa vào việc lưu thông... ta định xây dựng cầu lên kế hoạch xác định cầu trình tự xây Mỗi cầu xác định cặp đảo u, v mà nối Trong trình thực kế hoạch đến lúc từ đảo đến đảo khác đường Ví dụ, Oceani có đảo người ta định xây... - có vật cản hay không bảng hình chữ nhật chứa ô vuông Mảng P dùng để đánh dấu ô “loang” đến; đồng thời để phục vụ cho việc truy xuất đường sau nên ô [i,j] “loang” đến P[i,j] gán giá trị r (r