Code: #include #include #include #define MAX 100 //Khai bao cau truc thap Ha Noi //Bao gom:so dia,cot nguon,cot dich typedef struct HaNoi{ int n;//So dia can di chuyen int Nguon;//Cot bat dau di chuyen int Dich;//Cot duoc chuyen den int Tam;//cot trung gian }ThapHaNoi; //Dinh nghia du lieu typedef ThapHaNoi DataType; //Khai bao cau truc node typedef struct node{ DataType info; struct node*Next; }Node; //Dinh nghia node typedef Node *NodePtr; NodePtr pTop; //Ban dau stack rong void initStack(NodePtr &pTop) { pTop=NULL ; } // tao node NodePtr NewNode() { NodePtr newnode; newnode=(NodePtr)malloc(sizeof(Node)); return newnode; } NodePtr CreateNode(DataType x) { NodePtr p=(NodePtr)malloc(sizeof(Node)) ; p->info=x; p->Next=NULL; return p; } //Kien tra stack rong int isEmpty(NodePtr pTop) { if(pTop==NULL) return 1; else return 0; } //Giai phong stack void FreeNode(NodePtr p) { free(p); } //Lay phan tu dau stack HaNoi Pop(NodePtr &pTop) { NodePtr p; DataType value; if(isEmpty(pTop)) { printf("Stack is empty"); } else p=pTop;//Luu phan tu dau stack vao p pTop=pTop->Next;//Cap nhat lai pTop value=p->info; FreeNode(p); return value; } //Dua phan tu vao stack void Push(NodePtr &pTop,DataType x) { NodePtr node; node=NewNode(); node->info=x; node->Next=pTop; pTop=node; } //Thap Ha Noi //Du lieu dau vao //n:so dia can di chuyen,ng:cot nguon chua dia can di chuyen //d:cot dich can chuyen den //t:cot trung gian void BTThapHaNoi (int &n) { NodePtr pTop;//Stack chua thong tin di chuyen initStack(pTop);//Khoi tao stack //Dua vao stack ThapHaNoi hn; hn.n=n; hn.Nguon=1; hn.Dich=2; hn.Tam=3; Push(pTop,hn); while(!isEmpty(pTop)) { hn=Pop(pTop);//Lay phan tu dau stack //Truong hop chi co dia,thi di chuyen dia nguon->dich if(hn.n==1) printf("\nDi chuyen dia tu cot %d ->%d",hn.Nguon,hn.Dich); //Truong hop co nhieu hon dia else{ ThapHaNoi hn1; //ThapHaNoi hn1,hn2,hn3; //Dua thong tin di chuyen n-1 dia tu tam -> dich hn1.n=hn.n-1; hn1.Nguon=hn.Tam; hn1.Dich=hn.Dich; hn1.Tam=hn.Nguon; Push(pTop,hn1); //Dua thong tin di chuyen dia tu nguon -> dich hn1.n=1; hn1.Nguon=hn.Nguon; hn1.Dich=hn.Dich; hn1.Tam=hn.Tam; Push(pTop,hn1); //Dua thong tin di chuyen n-1 dia tu nguon -> tam(trung gian) hn1.n=hn.n-1; hn1.Nguon=hn.Nguon; hn1.Dich=hn.Tam; hn1.Tam=hn.Dich; Push(pTop,hn1); } } } Void main() { int n; clrscr(); printf("\t====================================================\n"); { } printf("\nNhap vao so dia(1->10):"); scanf("%d",&n); if(n>10) { printf("So dia cho phep chi tu 1->10,xin vui long nhap lai\n"); } else { BTThapHaNoi(n); } } while(n>10); getch(); Tìm hiểu cài đặt tốn tơ màu đồ thị: Thuật tốn tơ màu đồ thị Input: đồ thị G = (V, E) Output: đồ thị G = (V, E) có đỉnh gán màu Bước :tô màu cho đỉnh Bước : tô màu cho đỉnh i (i=2,3,4, ,n) theo quy tắc.Gọi MAU tập màu tô cho đỉnh kề với i.Chọn số nguyên dương nhỏ chưa có tập MAU để tơ màu cho đỉnh i Xây dựng chương trình Các đỉnh theo bậc Đầu tiên gán màu cho đỉnh Xét tiếp đỉnh để tơ màu cho đỉnh cịn lại Q trình tơ màu cho đỉnh xét vịng lặp nhỏ để kiểm tra tính liên thơng,nếu liên thông không gán trùng màu ngược lại Q trình lặp lại khơng cịn đỉnh chưa tơ Thuật Tốn Tơ Màu Đồ Thị : #include"stdio.h" #include"conio.h" #include"stdlib.h" #define max 50 int n,b[50],a[max][max]; void to(int n) { switch(n) { case 1: printf(" xanh luc "); break; case 2: printf(" "); break; case 3: printf(" vang "); break; case 4: printf(" tim "); break; case 5: printf(" hong "); break; case 6: printf(" cam "); break; } } void docfile(void) { FILE *fp; int i,j; fp=fopen("d:\\tomau.txt","rt"); fscanf(fp,"%d",&n); printf(" ma tran ke la "); for (i=1;i