nebulafire
Tổng số bài gửi : 25 Join date : 06/02/2010 Age : 37
| Tiêu đề: THAP HA NOI Sun Feb 21, 2010 7:54 pm | |
| - Code:
-
#include<stdio.h> #include<conio.h> #include<iostream.h> #define MAX_ELE 100 #define TRUE 1 #define FALSE 0
struct data { int N; int x, y, z; }; typedef struct data DATA; struct stack { int n; DATA nodes[MAX_ELE]; };
typedef struct stack STACK;
// tao ngan xep rong void init(STACK &stack) { stack.n=0; }
// kiem tra ngan xep rong int empty(STACK stack) { return (stack.n==0 ? TRUE : FALSE); }
int full(STACK stack){ return (stack.n== MAX_ELE ? TRUE : FALSE); } // chen phan tu vao stack void push(STACK &stack, DATA info) { if (full(stack)) printf("Ngan xep bi day."); else stack.nodes[++stack.n] = info; }
//loai phan tu ra khoi stack DATA pop (STACK &stack) { DATA x; if(empty(stack)) printf("Danh sach khong co phan tu."); else x = stack.nodes[stack.n--]; return x; } // ham di chuyen thap ha noi void move(DATA X) { DATA data, temp; STACK stack; init(stack); push(stack,X); do { data=pop(stack); //Lay phan tu dau if (data.N==1) printf("\nChuyen 1 dia: %d --> %d",data.x,data.y); else { //Luu cho loi goi Move(N-1,z,y,x) temp.N=data.N-1; temp.x=data.z; temp.y=data.y; temp.z=data.x; push(stack,temp); // Luu cho loi goi Move(1,x,y,z) temp.N=1; temp.x=data.x; temp.y=data.y; temp.z=data.z; push(stack,temp); // Luu cho loi goi Move(N-1,x,z,y) temp.N=data.N-1; temp.x=data.x; temp.y=data.z; temp.z=data.y; push(stack,temp); } } while (!empty(stack)); } void create_data(int N, int x, int y, int z, DATA &X){ X.N = N; X.x = x; X.y = y; X.z = z; } void main() { clrscr(); int n; DATA X; create_data(3,1,2,3,X); move(X); getch(); }
| |
|