CƠ SỞ LÝ THUYẾT THUẬT TOÁN QUAY LUI, TRÌNH BÀY THUẬT TOÁN VÀ CÀI ĐẶT TRÊN C CHƯƠNG TRÌNH ỨNG DỤNG THUẬT TOÁN QUAY LUI ĐỂ TÌM ĐƯỜNG ĐI TRONG MÊ CUNG
ĐẠI HỌC KINH TẾ ĐÀ NẴNG KHOA THỐNG - KÊ TIN HỌC −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −− Môn học: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Tên Đề Tài: CƠ SỞ LÝ THUYẾT THUẬT TOÁN QUAY LUI, TRÌNH BÀY THUẬT TOÁN VÀ CÀI ĐẶT TRÊN C CHƯƠNG TRÌNH ỨNG DỤNG THUẬT TOÁN QUAY LUI ĐỂ TÌM ĐƯỜNG ĐI TRONG MÊ CUNG Nhóm 7: Nguyễn Thị Ngọc Sương – 37H11K14.1 Hồ Văn Trọng – 37H11K14.1 Phùng Quý Châu – 37H11K14.1 Phùng Thị Tuyết – 37H11K14.1 Đỗ Thị Hiền – 37H11K14.1 Lê Thị Ánh Tuyết – 37H11K14.1 Nguyễn Thị Thảo – 36H11K14.1 Trần Thị Ngân – 37H11K14.1 GVHD: Th.s Nguyễn Thành Thuỷ Cấu trúc dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy Đà Nẵng , 03/2012 Nhóm 7 Trang 2 Cấu trúc dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy MỤC LỤC Table of Contents MỤC LỤC 3 Table of Contents .3 LỜI CẢM ƠN 3 I. GIỚI THIỆU .4 1. Lời mở đầu .4 3. Tìm hiểu về mê cung 5 4. Tìm hiểu về thuật toán quay lùi (Đệ quy) .6 4.1 Định nghĩa : 6 4.2 Các bước cơ bản để giải quyết bài toán đệ quy 6 II. GIẢI QUYẾT VẤN ĐỀ 7 1. Cách tìm đường đi trong thuật toán mê cung: .7 Yêu Cầu như sau: .7 2. Mô phỏng cách tìm 8 Bảng mô phỏng dữ liệu nguồn .8 Đồ thị mô phỏng 9 3. Thuật toán đệ quy mê cung: .9 4. Giải thích sơ bộ các lệnh trong thuật toán .11 III. KẾT LUẬN - ĐÁNH GIÁ .11 1. Đánh giá về đề tài 11 2. Kết luận 12 IV. PHỤ LỤC .12 1. Hướng dẫn chạy demo thuật toán 12 2. Tài liệu tham khảo 13 LỜI CẢM ƠN Trong thời gian làm báo cáo nhóm chúng em gặp không ít khó khăn khi chưa biết hướng giải quyết bài toán trong thời gian xây dựng giải thuật hay khi viết chương trình . Nhưng được sự hướng dẫn tận tình của thầy Nguyễn Thành Thủy nên nhóm đã giải quyết được các vấn đề từ nhỏ đến lớn đến khi hoàn thành được yêu cầu Nhóm 7 Trang 3 Cấu trúc dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy của đề tài. Bên cạnh đó cùng với sự giúp đỡ của bạn bè nên nhóm cũng đã học hỏi được nhiều kinh nghiệm để hoàn thành hơn nữa đề tài. Cuối lời nhóm chúng em xin chân thành gửi lời cảm ơn đến thầy Nguyễn Thành Thủy đã giúp đỡ chúng em hoàn thành tốt đề tài này! Xin chân thành cảm ơn! I. GIỚI THIỆU 1. Lời mở đầu Trong cuộc sống có nhiều vấn đề buộc ta phải lựa chọn hoặc tìm ra những phương án để giải quyết được vấn đề. Trong toán học cũng thế, để giải một bài toán đòi hỏi ta phải chọn được phương án giải quyết bài toán một cách tối ưu để thu được kết quả mong muốn. Trong lập trình cũng thế ta phải tìm ra được giải thuật đúng để làm nền tảng xây dựng chương trình Nhóm 7 Trang 4 Cấu trúc dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy chạy đúng kết quả bài toán hay đề tài của người yêu cầu đặt ra. Chẳng hạn như bài toán mê cung, đòi hỏi ta phải xây dựng thuật toán tìm được lối đi từ cửa vào để đến được lối ra. Trong khi đó, có thể đứng trước nhiều ngã rẽ và phải tìm được lối đi cho đến khi thoát khỏi mê cung. 2. Đặc tả đề tài • Yêu cầu o Chương trình đọc mê cung từ tập tin văn bản(INPUT.TXT) • Mục tiêu đạt được o Tìm đường đi đến cửa ra. (OUTPUT.TXT) • Môi trường làm việc. o Ngôn ngữ lập trình C. 3. Tìm hiểu về mê cung. a) Định nghĩa: Mê cung là một hệ thống gồm nhiều hành lang nối với nhau. Bài toán tìm đường đi trong mê cung là đứng từ vị trí s ( bên trong mê cung hoặc cửa vào ) tìm đường đi đến vị trí e ( cửa ra hoặc bên trong mê cung). Nhóm 7 Trang 5 Cấu trúc dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy Nếu biểu diễn mê cung bằng đồ thị, trong đó các hành lang là các cạnh, còn các giao điểm của chúng là các đỉnh thì ta có bài toán tìm đường đi trong đồ thị. Lưu ý rằng ta không biết trước sơ đồ của mê cung. b) Ví dụ: Bài toán đặt ra là: Hãy vào bằng cửa A và tìm đường ra ở cửa B? 4. Tìm hiểu về thuật toán quay lùi (Đệ quy) 4.1 Định nghĩa : - Thuật toán quay lùi là quá trình xử lý bằng cách gọi lại chính bản thân nó để giải quyết chương trình con 4.2 Các bước cơ bản để giải quyết bài toán đệ quy Nhóm 7 Trang 6 B A A Cấu trúc dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy - Tìm điều kiện dừng của bài toán - Tìm dạng tổng quát của bài toán II. GIẢI QUYẾT VẤN ĐỀ 1. Cách tìm đường đi trong thuật toán mê cung: Khởi tạo lối đi đầu tiên tại cửa vào, sau đó dùng thuật toán (thuật toán quay lùi ) để tìm lối đi. Trong khi tìm lối đi, lối đi có thể đi được nếu không phải là tường ( giá trị 0 trong ma trận ). Ngược lại là tường buộc phải quay lui. Trong lúc đi, tại những điểm liên thông đều được đánh dấu. Khi không thể đi được thì phải quay lui tại điểm vừa đi qua và cứ như thế cho đến khi đi đến cửa ra. Yêu Cầu như sau: Dữ liệu nguồn file INPUT.TXT In ra file OUTPUT.TXT • Quy tắc dữ liệu nguồn: - Dòng đầu tiên là số đỉnh - Dòng thứ hai là đỉnh bắt đầu và đỉnh kết thúc - Các dòng tiếp theo là mê cung(đường đi) • Quy tắc trong mê cung trên Nhóm 7 Trang 7 5 1 5 0 2 5 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 3 0 0 0 0 0 1 2 4 3 5 1 2 4 5 1 3 5 Cấu trúc dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy - 0 là đường có thể đi được - 1 là đường không thể đi được 2. Mô phỏng cách tìm Theo đề ta có 5 đỉnh, các đỉnh như sau: Bảng mô phỏng dữ liệu nguồn Đỉnh 1 2 3 4 5 1 0 2 5 0 0 2 0 0 0 1 0 3 0 0 0 0 1 4 0 0 1 0 3 5 0 0 0 0 0 • Đỉnh 1 liên thông với đỉnh 2 giá trị là 2 • Đỉnh 1 liên thông với đỉnh 3 giá trị là 5 • Đỉnh 2 liên thông với đỉnh 4 giá trị là 1 • Đỉnh 3 liên thông với đỉnh 5 giá trị là 1 • Đỉnh 4 liên thông với đỉnh 3 giá trị là 1 Nhóm 7 Trang 8 Cấu trúc dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy • Đỉnh 4 liên thông với đỉnh 5 giá trị là 3 Đồ thị mô phỏng Như vậy kết quả đường đi từ đỉnh 1 đến đỉnh 5 sẽ là: - 1 => 2 => 4 => 3 => 5 - 1 => 2 =>4 => 5 - 1 => 3 => 5 3. Thuật toán đệ quy mê cung: #include<stdio.h> #include<conio.h> int a[100][100],x[100],n,xp,kt,i=0,j=0; void xuly( int k, int dem ) { Nhóm 7 Trang 9 1 5 4 3 2 2 5 1 1 1 3 Cấu trúc dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy int v; FILE *f; f=fopen("c://file//OUTPUT.TXT","a"); for(v=1;v<=n;v++) { if( a[x[k-1]][v]!=0 ) { dem = dem +1; x[k] = v; if(x[k] == kt) { for( i=1; i<=dem; i++ ) { fprintf(f,"%d ",x[i]); } fprintf(f,"\n"); dem = dem - 1; } xuly(k+1,dem); dem = dem - 1; } } } main() { FILE *f; if( (f=fopen("c://file//INPUT.TXT","r"))==NULL ) printf("khong tim thay file o vi tri c://file/INPUT.TXT "); else { fscanf(f,"%d%d%d",&n,&xp,&kt); for(i=1;i<=n;i++) Nhóm 7 Trang 10 [...]... th c III KẾT LUẬN - ĐÁNH GIÁ 1 Đánh giá về đề tài • Ưu đi m - Thuật toán ngắn gọn - Liệt kê đư c tất c c c đường đi ra mê cung Nhóm 7 Trang 11 C u tr c dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy • Như c đi m - Không tối ưu về đường đi ra mê cung • Hướng phát triển Tương lai sẽ hướng đến những trò chơi game đồ hoạ trí tuệ - giải trí 2 Kết luận Bài toán tìm đường đi trong mê cung là bài toán. .. năng toán h c cho người h c, đồng thời nó c ng kích thích đư c c sáng tạo và tư duy định hướng cho người h c Bài toán này đã cuốn hút đư c sự quan tâm c a nhiều người bởi tính đa dạng và sự ứng dụng c a nó Do vậy, vi c h c tập, nghiên c u chủ đề này là rất bổ ích vì nó c thể giải quyết đư c nhiều vấn đề nảy sinh từ th c tế cu c sống Trong đề tài này, mặt dù nhóm em đã dành nhiều thời gian nghiên c u,... thời gian nghiên c u, thảo luận, và đư c sự hướng dẫn chu đáo c a Thầy Nguyễn Thành Thuỷ nhưng do khả năng c hạn nên ch c chắn đề tài không tránh khỏi thiếu sót Kính mong Thầy c lời góp ý, bổ sung, chỉnh sửa để đề tài đư c hoàn thiện hơn IV PHỤ L C 1 Hướng dẫn chạy demo thuật toán • Copy file INPUT.TXT vào ổ đĩa C/ file • Chạy demo Nhóm 7 Trang 12 C u tr c dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành.. .C u tr c dữ liệu và giải thuật GVHD: Th.s Nguyễn Thành Thủy for(j=1;j