Diễn đàn sinh viên công nghệ thông tin, chia sẻ, giao lưu, học hỏi. Kết nối ... Những ngôn ngữ cơ bản mà bạn cần phải nắm nếu muốn thành 1 lập trình viên ...VuaTenMien.Com
Chủ Nhật, 4 tháng 8, 2013
Code C-C++: Bài toán Tháp Hà Nội
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define MAX 12
#define BegPos 105
#define AuxPos 305
#define EndPos 505
int width;
typedef struct disc
{
char val1[MAX];
char top,pos;
};
void push(disc *tt,int x);
pop(disc *tt);
void tower(int,disc *,disc *,disc *);
void draw_stack(disc *beg,disc *,disc *);
int main(void)
{
int gdriver = DETECT, gmode, errorcode;
int i,x=2;
disc beg,end,aux;
printf("
TOWER OF HANOI
");
printf("=======================================================");
printf("
How Many Disks[1-10]:- ");
scanf("%d",&x);
initgraph(&gdriver, &gmode, "d:\TC\BGI");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s
", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
width=50/x;
beg.top=end.top=aux.top=0;
beg.pos=1;end.pos=3;aux.pos=2;
for(i=0;i<x;i++)
push(&beg,(x-i)+1);
draw_stack(&beg,&end,&aux);
tower(x,&beg,&end,&aux);
closegraph();
return 0;
}
void tower(int n,disc *beg,disc *aux,disc *end)
{
if(n>0)
/* {
push(end,pop(beg));
draw_stack(beg,end,aux);
}
else*/
{
tower(n-1,beg,end,aux);
push(end,pop(beg));
draw_stack(beg,end,aux);
tower(n-1,aux,beg,end);
}
//
}
void push(disc *tt,int x)
{
tt->val1[tt->top]=x;
tt->top++;
}
pop(disc *tt)
{
int a;
tt->top--;
a=tt->val1[tt->top];
tt->val1[tt->top]=0;
return a;
}
void draw_stack(disc *beg,disc *end,disc *aux)
{
int ypos=295,i,height=10,xpos;
int ver=0;
cleardevice();
setfillstyle(1,2);
bar(20,300,580,310);
bar(100,100,110,300);
bar(300,100,310,300);
bar(500,100,510,300);
rectangle(20,300,580,310);
rectangle(100,100,110,300);
rectangle(300,100,310,300);
rectangle(500,100,510,300);
/* END TOWER*/
ypos=295;
if(end->pos==1)
xpos=BegPos;
else if(end->pos==2)
xpos=AuxPos;
else if(end->pos==3)
xpos=EndPos;
for(i=0;i<end->top;i++)
{
setfillstyle(end->val1[i],end->val1[i]);
bar(xpos-(end->val1[i]*width),ypos,xpos+(end->val1[i]*width),ypos-height);
rectangle(xpos-(end->val1[i]*width),ypos,xpos+(end->val1[i]*width),ypos-height);
ypos-=(height+2);
}
ver=end->pos;
/* BEG TOWER*/
if(beg->pos==1)
xpos=BegPos;
else if(beg->pos==2)
xpos=AuxPos;
else if(beg->pos==3)
xpos=EndPos;
ypos=295;
for(i=0;i<beg->top;i++)
{
setfillstyle(beg->val1[i],beg->val1[i]);
bar(xpos-(beg->val1[i]*width),ypos,xpos+(beg->val1[i]*width),ypos-height);
rectangle(xpos-(beg->val1[i]*width),ypos,xpos+(beg->val1[i]*width),ypos-height);
ypos-=(height+2);
}
/* AUX TOWER*/
ver=ver*10+beg->pos;
if(ver<20)
{
if(ver%10==2)
xpos=EndPos;
else
xpos=AuxPos;
}
else if(ver<30)
{
if(ver%10==1)
xpos=EndPos;
else
xpos=BegPos;
}
else if(ver<40)
{
if(ver%10==1)
xpos=AuxPos;
else
xpos=BegPos;
}
ypos=295;
for(i=0;i<aux->top;i++)
{
setfillstyle(aux->val1[i],aux->val1[i]);
bar(xpos-(aux->val1[i]*width),ypos,xpos+(aux->val1[i]*width),ypos-height);
rectangle(xpos-(aux->val1[i]*width),ypos,xpos+(aux->val1[i]*width),ypos-height);
ypos-=(height+2);
}
getch();
}
Đăng ký:
Đăng Nhận xét (Atom)
Bài đăng phổ biến
-
Website-Watcher 2011 sẽ theo dõi và thông báo cho bạn biết mỗi khi trên website, forum, blog,… ưa thích có tin bài mới. Nhờ Website-Watcher...
-
import java.io.*; public class Test_Ngto{ public static void main(String args[]){ InputStream is = System.in; ...
-
TÀI LIỆU TỔNG HỢP Tài Liệu Đại Học Bách Khoa Hà Nội Tài Liệu Đại Học Bách Khoa Đà Nẵng Tài Liệu Đại Học Bách Khoa HCM Tài Liệu FPT ...
-
NHẬP VÀ XUẤT DỮ LIỆU 4.1 Lệnh xuất Cú pháp : printf ("chuỗi định dạng"[, đối mục 1, đối mục 2,…]); Chức năng : Đưa ...
-
So sánh 2 cách tạo stack bằng mảng và bảng kiểu cấu trúc nhé Mảng: http://codepad.org/rTA0NJgL #include <stdio.h> #include<co...
-
Vacationnews.Xyz Vacationsnews.Xyz Vacationsworld.Xyz Vantagecreditunion.Xyz Venturenews.Xyz Ventureworld.Xyz Vermontattorney.Xyz Vermontho...
-
/*--- Yêu cầu: Nhập vào số nguyên n có 8 chữ số. Hãy tìm: - Giá trị tổng của các chữ số - Giá trị hàng đơn vị của tổng ...
-
Mark Futon là cây bút sắc sảo cho DotSouce , một trang chuyên thông tin về các thủ thuật dành cho domain đã gửi cho tôi 1 bài viết mà the...
-
Chồng tôi tuyên bố không đẻ được con trai thì sẽ đi gửi người phụ nữ khác. Chồng tôi mười con gái không bằng một con trai Vợ chồng tôi cưới...
-
using System; namespace PhuongTrinhBacNhat { class Program { static void Main(string[] args) { Console.Write(...
Không có nhận xét nào:
Đăng nhận xét