當前位置:文檔之家? 漢諾塔移動動畫

漢諾塔移動動畫

這是經典問題漢諾塔的解題演示動畫,代碼如下:
///////////////////////////////////////////////////
// 程序名稱:漢諾塔移動動畫
// 編譯環境:Visual C++ 6.0,EasyX 2011驚蟄版
// 作 者:Ronald Email:ryl910527@gmail.com
// 最后修改:2011-5-26
//
#include
#include
#include
#define MAX 64 // 圓盤的最大數目
#define NULL 0


// 定義棧
struct STKNODE
{
int a[4];
};

struct STK
{
STKNODE* stack[MAX];
int top;
};


// 定義全局變量
STK s[3]; // 聲明三個棧,分別代表一號二號三號鋼針上圓盤的狀態
int v = 5; // 調整速度



// 函數聲明
void Initstk(STK* s); // 初始化棧
void Hannoi(int n, char a, char b, char c); // 漢諾塔遞歸
void start(); // 開始畫面
void Move(int n, char a, char b); // 移動過程
int switchab(char a); // 返回鋼針號
void adjust(); // 調整速度暫停



// 主函數
void main()
{
int n, ta[4] = {115, 500, 285, 520}; // 第一個圓盤的位置
printf("盡量小于16\n"); // 因為大于十六時就會顯示有誤,但程序可以正常運行
printf("請輸入漢諾塔的層數(1~64):");
scanf("%d", &n);
STKNODE** p;
p = (STKNODE**)malloc(n * sizeof(STKNODE **)); // 聲明一個元素為 n 個的動態 STKNODE 型指針數組
for (int i2 = 0; i2 < n; i2 ++)
{
p[i2] = (STKNODE *)malloc(sizeof(STKNODE)); // 為每一個指針申請空間
}
Initstk(&s[0]);
Initstk(&s[1]);
Initstk(&s[2]); // 將三個棧初始化
start(); // 呈現開始畫面
setfillstyle(YELLOW); // 圓盤的顏色
for (int i=0; i < n; i++)
{
ta[0] += 5;
ta[1] -= 20;
ta[2] -= 5;
ta[3] -= 20;
bar(ta[0], ta[1], ta[2], ta[3]); // 畫出n個從大到小一次疊放的黃色圓盤
++s[0].top; // 進棧
for (int i1 = 0; i1 < 4; i1++)
{
p[i]->a[i1] = ta[i1];
s[0].stack[s[0].top] = p[i]; // 記錄每個矩形的位置,top為圓盤的個數
}
}
Hannoi(n, 'a', 'b', 'c'); // 漢諾塔遞歸函數
system("pause");
printf("\t\t\t\tGame Over!\n");
}



///////////////////////////////////////////////////
// 函數定義

// 漢諾塔的遞歸
void Hannoi(int n, char a, char b, char c)
{
if(n == 1)
Move(1, a, c);
else
{
Hannoi(n-1, a, c, b);
Move(n, a, c);
Hannoi(n-1, b, a, c);
}
}

// 棧的初始化
void Initstk(STK *s)
{
int i;
s->top = 0;
for (i = 0; i <= MAX; i++)
s->stack[++s->top] = NULL;
s->top = 0;
}

// 移動過程
void Move(int n, char a, char b)
{
int i3, i4 = 0, i5 = 0;
i3 = b - a; // 目的鋼針與源鋼針的位置差值
i4 = switchab(a); // 源鋼針鋼針號
i5 = switchab(b); // 目的鋼針號
STKNODE *q1, *q0; // 兩個中間結點用于源棧和目的棧間的值得傳遞,

相關文檔
  • 漢諾塔ppt動畫演示

  • 漢諾塔問題

  • 動畫演示ppt

  • 系統動畫演示ppt

  • 解決漢諾塔

  • 漢諾塔演示

相關文檔推薦:
晚上睡不着一个人看的软件