Đang tải... (xem toàn văn)
Bài tâp 1: Viet chuong trinh dinh nghia cau truc stack voi cac thao tac tuong ung Su dung cau truc stack va cac thao tac da cai dat de luu tru n so nguyen duoc nhap tu ban phim . Lay cac gia tri ra khoi stack va hien thi ra man hinh. Bài tập 2 : Tìm kiếm theo chiều rộng Bài tập 3 : Thuật toán tìm kiếm A Bài tập 4: Thuật toán Best First Search Bài tập 5: Thuật toán nhánh cận ( Bài tập : Người du lịch )
Bài tâp 1: Viet chuong trinh dinh nghia cau truc stack voi cac thao tac tuong ung Su dung cau truc stack va cac thao tac da cai dat de luu tru n so nguyen duoc nhap tu ban phim Lay cac gia tri khoi stack va hien thi man hinh Bài tập : Tìm kiếm theo chiều rộng Bài tập : Thuật tốn tìm kiếm A* Bài tập 4: Thuật toán Best First Search Bài tập 5: Thuật toán nhánh cận ( Bài tập : Người du lịch ) Lời Giải Bài : Viet chuong trinh dinh nghia cau truc stack voi cac thao tac tuong ung Su dung cau truc stack va cac thao tac da cai dat de luu tru n so nguyen duoc nhap tu ban phim Lay cac gia tri khoi stack va hien thi man hinh CODE: #include #include using namespace std; #define MAX 100 // Tao Node struct Node{ int data; Node* next; }; // Tao cau truc ngan xep struct Stack{ Node* top; }; // Khoi tao ngan xep void Init(Stack &s){ s.top = NULL; } // Kiem tra rong int IsEmpty(Stack s){ if (s.top==NULL) return 1; return 0; } // Tao nut Node* createnode(int x){ Node* p=new Node; if(p==NULL) return NULL; p->data=x; p->next=NULL; return p; } // Dau vao void Push(Stack &s, int x){ Node* p=createnode(x); if (IsEmpty(s)==1) s.top=p; else { p->next=s.top; s.top=p; } } // dau int Pop(Stack &s){ int x; Node* p=s.top; if (IsEmpty(s)==1) return 0; x=p->data; s.top=s.top->next; delete p; return x; } int Search(Stack s, int x){ for (Node* p=s.top; p!=NULL; p=p->next) if (p->data==x) return 1; return 0; } #define SIZE const int X = 32767; char Label[7] = {'A','B','C','D','E','F','G'}; int main(){ int T[7][7] = {{0, 1, 1, X, X, X, X}, {1, 0, X, 1, 1, X, X}, {1, X, 0, X, X, 1, 1}, {X, 1, X, 0, X, X, X}, {X, 1, X, X, 0, X, X}, {X, X, 1, X, X, 0, X}, {X, X, 1, X, X, X, 0}}; int u, v, start = 0, goal = 5, ok=0; int Close[SIZE]={0}; // Chua dinh nao duoc phat trien int Father[SIZE]; //Father[i] = chi so dinh cha cua i Stack OP; Init(OP); Push(OP, start); while (!IsEmpty(OP)){ //lay u la trang thai o dau hang doi u = Pop(OP); //Kiem tra u co phai trang thai dich if (u==goal){ ok = 1; break; } //Luu u vao danh Close - de xac dinh u da duoc phat trien Close[u] = 1; //xet lan luot v cua u for (v=SIZE; v>=0; v ) if (T[u][v]==1) if (Search(OP, v)==0 && Close[v]==0){ Push(OP, v); Father[v] = u; } } if (ok==1){ cout data==x) return 1; return 0; } // Huy hang doi void huy(Queue &q){ while(q.pHead!=NULL){ Node *p=q.pHead; q.pHead=q.pHead->next; delete p; } q.pTail==NULL; } const int X = 32767; char Label[7] = {'A','B','C','D','E','F','G'}; int main(){ int T[7][7] = {{0, 1, 1, X, X, X, X}, {1, 0, X, 1, 1, X, X}, {1, X, 0, X, X, 1, 1}, {X, 1, X, 0, X, X, X}, {X, 1, X, X, 0, X, X}, {X, X, 1, X, X, 0, X}, {X, X, 1, X, X, X, 0}}; int u, v, start = 0, goal = 3, ok=0; int Close[7]={0}; // Chua dinh nao duoc phat trien int Father[7]; //Father[i] = chi so dinh cha cua i Queue OP; Init(OP); Node *p =taonut(start); Add(OP, p); while (OP.pHead!=NULL){ //lay u la trang thai o dau hang doi u = Remove(OP); //Kiem tra u co phai trang thai dich if (u==goal){ ok = 1; break; } //Luu u vao danh Close - de xac dinh u da duoc phat trien Close[u] = 1; //xet lan luot v cua u for (v=0; v finsh; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) shichiki >> a[i][j]; } } shichiki.close(); } void printfmaxtric(int a[100][100], int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout