Các hệ thống thông minh nhân tạo và ứng dụng Các hệ thống thông minh nhân tạo và ứng dụng Khoa CNTT, ĐH KHTN HCM 1 HƯỚNG DẪN THỰC HÀNH TÌM KIẾM THEO CHIỀU RỘNG BFS 1 Các cấu trúc dữ liệu cần dùng Các[.]
Các hệ thống thông minh nhân tạo ứng dụng HƯỚNG DẪN THỰC HÀNH TÌM KIẾM THEO CHIỀU RỘNG - BFS Các cấu trúc liệu cần dùng Các cấu trúc liệu cần sử dụng cài đặt thuật tốn tìm kiếm đường theo chiều rộng – BFS, bao gồm: Đồ thị (hay đồ đường đi): ma trận kề, có kích thước 𝑁 × 𝑁 Trong 𝑁 số đỉnh đồ thị Hàng đợi 1.1 Đồ thị class MyGraph { private: int soDinh; int dinh[MAX][MAX]; } Để sử dụng đồ thị, cần khai báo biến sau: MyGraph g; 1.2 Hàng đợi Sinh viên tự cài đặt hàng đợi sử dụng kiểu liệu hỗ trợ sẵn Dưới ví dụ cho hàng đợi ngơn ngữ C++ Sinh viên tham khảo thêm liên kết sau đây: http://www.cplusplus.com/reference/queue/queue/ #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //Khai báo hàng đợi queue q; // Thêm phần tử vào hàng đợi q.push(5); return 0; } Khoa CNTT, ĐH KHTN HCM Các hệ thống thông minh nhân tạo ứng dụng Cài đặt 2.1 Đọc thông tin từ tập tin đầu vào void MyGraph::DocDoThi(char* filename, int &start, int &end){ //1 Mở tập tin ifstream f; //2 Đọc số đỉnh f >> this->soDinh; //3 Đọc đỉnh bắt đầu đỉnh kết thúc f >> ; f >> ; //4 Đọc ma trận kề for(int i = 0; i < this->soDinh; i++){ for(int j = 0; j < this->soDinh; j++){ } } } 2.2 Thuật toán BFS int MyGraph::RunBFS(int start, int end, int* dinhTruoc){ //1 Khởi tạo hàng đợi //2 Khởi tạo thông tin khác // - nhãn (labels): dùng để đánh dấu vị trí thăm // - dinhTruoc: để ghi nhớ đỉnh trước đỉnh đường //3 Thêm start vào hàng đợi /*4 while( hàng đợi không rỗng) { 4.1 Lấy phần tử đầu vào hàng đợi 4.2 Nếu v trùng với đỉnh end Dừng thuật tốn Trả có đường Ngược lại, Lặp qua đỉnh i có cạnh nối từ v Nếu đỉnh i chưa viếng thăm - Gán dinhTruoc[i] = v - Đánh dấu thăm i Khoa CNTT, ĐH KHTN HCM Các hệ thống thông minh nhân tạo ứng dụng - Thêm i vào hàng đợi } */ } Khoa CNTT, ĐH KHTN HCM ... i < this->soDinh; i++){ for(int j = 0; j < this->soDinh; j++){ } } } 2.2 Thuật toán BFS int MyGraph::RunBFS(int start, int end, int* dinhTruoc){ //1 Khởi tạo hàng đợi //2 Khởi tạo thông tin