1. Trang chủ
  2. » Luận Văn - Báo Cáo

slide thuyết trình đồ án Đồ Án Mê cung và đường đi

21 884 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 327 KB

Nội dung

TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNGKHOA CÔNG NGHỆ THÔNG TIN CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN Sinh viên thực hiện: Giáo viên hướng dẫn: Phan Thanh Tao Đề tài: MÊ CUNG VÀ TÌM ĐƯỜNG ĐI TRONG MÊ

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG

KHOA CÔNG NGHỆ THÔNG TIN

CẤU TRÚC DỮ LIỆU VÀ THUẬT TOÁN

Sinh viên thực hiện:

Giáo viên hướng dẫn: Phan Thanh Tao

Đề tài: MÊ CUNG VÀ TÌM ĐƯỜNG ĐI TRONG MÊ CUNG

Trang 2

N i dung báo cáo ội dung báo cáo

Trang 3

• Mê cung

• Thuật toán Loang

• Hàng đợi

Ph n 1: C ần 1: C ơ s lý thuy t ở lý thuyết ết

Trang 5

THUẬT TOÁN LOANG

Là thuật toán duyệt theo chiều rộng

Duyệt mọi khả năng có thể có của bài toán

Mô hình hoá thuật toán Loang

Từ đỉnh hiện tại, duyệt qua tất cả đỉnh

có thể đếnLặp lại quá trình đó đến khi gặp cấu hình mong muốn, ngược lại bài toán không có kết quả

Ph n 1: C ần 1: C ơ s lý thuy t ở lý thuyết ết

Trang 6

HÀNG ĐỢI

Là một cấu trúc dữ liệu dùng để chứa các đối tượng làm việc theo cơ chế FIFO

Hai thao tác quan trọng trong cấu trúc hàng đợi là :

EnQueue(o): thêm đối tượng o vào cuối hàng đợi.

DeQueue(): lấy đối tượng ở đầu queue ra khỏi hàng đợi và trả về giá trị của nó

Ứng dụng hàng đợi: khử đệ quy, quản lý các tiến trình,

tìm kiếm theo chiều rộng, quay lui, vét cạn…

Ph n 1: C ần 1: C ơ s lý thuy t ở lý thuyết ết

Trang 7

• Yêu cầu bài toán

• Giải quyết bài toán

– Cấu trúc dữ liệu – Các hàm, thủ tục

Trang 8

YÊU CẦU BÀI TOÁN

Cho một mê cung và tìm đường đi trong mê cung đó.

Trang 9

GiẢI QUYẾT BÀI TOÁN

Ngôn ngữ sử dụng : C++

Cấu trúc dữ liệu : Hàng đợi

typedef struct tagDNode

{

int x;

int y;

struct tagDNode* next;

struct tagDNode* father;

Trang 10

Giải quyết bài toán

– Các hàm, thủ tục

• DNODE* GetNode(int u,int v); //khởi tạo 1 node

• void EnQueue(QUEUE &l,DNODE* newe); //Thêm 1 node (newe)

vào hàng đợi

• DNODE* DeQueue(QUEUE &l); //Lấy ra 1 node ra khỏi hàng đợi

Trang 11

• Tìm đường đi (ngắn nhất)

• Tìm tất cả đường đi (có thể có)

Trang 12

While(maze.pHead != NULL)// Lặp trong khi hàng đợi chưa rỗng

Kiểm tra đỉnh đó là đỉnh ra ? Nếu đúng :In kết quả, kết thúc thuật toán Nếu sai :

Kiểm tra các hướng có thể đi từ đỉnh đó ? Nếu đi được :

g=GetNode(xnew,ynew);

EnQueue(maze,g);// Nạp đỉnh mới vào hàng đợi

g->father=p;// Đánh dấu đỉnh dẫn tới g

}

Trang 13

DNODE* S, Sw; //S là stack chứa các phần tử chứa đỉnh tạo thành đường đi

//Sw là stack chứa các đỉnh tạm thời

//S là stack chứa các đỉnh tạo thành đường đi

Nạp đỉnh đầu của Sw vào S;

Xoá đỉnh đầu tiên của Sw;

Lặp lại bước 2:

}

Bước 1:

Nạp đỉnh vào Stack S

Trang 14

Nếu như không thể đi được nữa (bị tắt đường)

Nạp đỉnh đầu của Sw vào S;

Xoá đỉnh đầu của Sw;

Lặp lại bước 2:

}}

Trang 15

Nếu đỉnh hiện tại là đỉnh ra

{

Xuất kết quả (nghĩa là xuất các đỉnh trong S);

Nếu Sw = NULL thì kết thúcNếu không

{

Xoá lùi trong S tới vị trí Sw->father;

Nạp đỉnh đầu của Sw vào S;

Xoá đỉnh đầu của Sw;

Lặp lại bước 2:

}}

Trang 16

• Chương trình được viết trong môi trường MFC (Visual C++)

• Kết quả được thể hiện dưới dạng đồ hoạ

(Toàn bộ chương trình nằm trong file nguồn kèm theo)

Trang 17

Mở file mê cung và ta có hình sau:

Trang 18

Click menu Best Path và chương trình sẽ vẽ đường đi

Trang 19

Click menu All Path, sau đó click menu View để xem các kết quả

Trang 20

 Bài toán hiệu quả khi lời giải nằm gần gốc của cây tìm kiếm

kể số lần tìm kiếm giải vô ích so với cách dùng tập hợp lưu các đỉnh kế tiếp

Tuy nhiên thuật toán này luôn luôn tìm ra lời giải.

Trang 21

• Nhóm xin phép được kết thúc phần trình bày của mình ở đây.

• Trong quá trình thực hiện đồ án không tránh khỏi những khó khăn, thiếu sót.

Cám ơn !

L i ờng k t ết

Ngày đăng: 10/04/2015, 16:26

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w