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 SÂU DFS 1 Các cấu trúc dữ liệu cần dùng 1 1 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 SÂU - DFS Các cấu trúc liệu cần dùng 1.1 Cấu trúc biểu diễn thông tin đoạn đường class MyStreet { private: int vertex1; int vertex2; char name[100]; float length; public: MyStreet(int v1, int v2, char* name, float cost){ … }; 1.2 Cấu trúc biễu diễn đồ thị class MyGraph { private: int soDinh; //Số đỉnh (số giao lộ) int dinh[MAX][MAX]; //Ma trận trọng số STREET arrStreets[MAX]; // thông tin đường }; 1.3 Ngăn xếp (Stack) Sinh viên cài đặt cách sử dụng mảng chiều danh sách liên kết Ngoài ra, sinh viên sử dụng kiểu liệu ngăn xếp hỗ trợ sẵn Dưới ví dụ sử dụng ngăn xếp ngôn ngữ C++ Sinh viên tham khảo thêm liên kết sau: http://www.cplusplus.com/reference/stack/stack/ #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //Khai báo ngăn xếp chứa phần tử số nguyên stack s; // Thêm phần tử vào ngăn xếp s.push(5); Khoa CNTT, ĐH KHTN HCM Các hệ thống thông minh nhân tạo ứng dụng return 0; } Cài đặt 2.1 Đọc thông tin từ tập tin đầu vào void MyGraph::InputGraph(char* filename, int &start, int &end) { //1 Đọc dòng từ từ file lưu vào start, end //2 Đọc số đỉnh lưu vào g.soDinh Sau đó, đọc số cạnh (M) //3 Đọc M dịng vào thông tin đoạn đường lưu vào g.arrStreets //4 Xây dựng ma trận trọng số từ g.arrStreets } 2.2 Thuật toán DFS Khởi tạo mảng label để đánh dấu địa điểm viếng thăm: chưa thăm thăm Ban đầu, ta khởi gán cho tất phần tử mảng int MyGraph::RunDFS(int start, int end, int* dinhTruoc){ //1 Khởi tạo ngăn xếp //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 ngăn xếp /*4 while( ngăn xếp không rỗng) { 4.1 Lấy phần tử đầu ngăn xếp (v) 4.2 Nếu v trùng với đỉnh end Dừng thuật tốn Trả có đường Nếu v đỉnh xét continue Ngược lại, Đánh dấu viếng thăm v Lặp qua đỉnh i có cạnh nối từ v Nếu đỉnh i chưa viếng thăm Khoa CNTT, ĐH KHTN HCM Các hệ thống thông minh nhân tạo ứng dụng - Gán dinhTruoc[i] = v - Thêm i vào ngăn xếp } */ } Khoa CNTT, ĐH KHTN HCM ... g.arrStreets } 2.2 Thuật toán DFS Khởi tạo mảng label để đánh dấu địa điểm viếng thăm: chưa thăm thăm Ban đầu, ta khởi gán cho tất phần tử mảng int MyGraph::RunDFS(int start, int end, int* dinhTruoc){