91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 1.35MB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2023-08-30
  • 語言: C/C++
  • 標簽: 漢諾塔??

資源簡介

真實再現漢諾塔移動過程。注意:移動的盤子不能太多。

資源截圖

代碼片段和文件信息

///////////////////////////////////////////////////
//?程序名稱:漢諾塔移動動畫
//?編譯環境: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? {
p[i2]?=?(STKNODE?*)malloc(sizeof(STKNODE)); //?為每一個指針申請空間
}?
Initstk(&s[0]);
Initstk(&s[1]);
Initstk(&s[2]); //?將三個棧初始化
start(); //?呈現開始畫面
setfillstyle(YELLOW); //?圓盤的顏色
for?(int?i=0;?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? {
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; //?兩個中間結點用于源棧和目的棧間的值得傳遞,q1為目的棧,q0為源棧
q1?=?(STKNODE?*)malloc(sizeof(STKNODE));
q0?=?(STKNODE?*)malloc(sizeof(STKNODE));

//?源棧與目的棧值的傳遞
q0?=?s[i4].stack[s[i4].top];
++s[i5].top; //?進棧
q1->a[0]?=?q0->a[0]?+?i3?*?200;
q1->a[1]?=?500?-?s[i5].top?*?20;
q1->a[2]?=?q0->a[2]?+?i3?*?200;
q1->a[3]?=?500?-?s[i5].top?*?20?+?20;
s[i5].stack[s[i5].top]?=?q1;
--s[i4].top; //?出棧

//?向上運動
while?(q0->a[1]?>=?100)
{
setfillstyle(YELLOW);
bar(q0->a[0]?q0->a[1]?q0->a[2]?q0->a[3]);
adjust(); //?調整函數
Sleep(10?*?v); //?暫停(ms)
setfillstyle(WHITE);
bar(q0->a[0]?q0->a[1]?q0->a[2]?q0->a[3]);
setcolor(RED);
line((q0->a[0]?+?q0->a[

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件?????164864??2012-03-09?19:43??漢諾塔移動動畫\Debug\vc60.idb

?????文件??????77824??2012-03-09?19:43??漢諾塔移動動畫\Debug\vc60.pdb

?????文件?????282678??2012-03-09?19:43??漢諾塔移動動畫\Debug\漢諾塔.exe

?????文件?????417748??2012-03-09?19:43??漢諾塔移動動畫\Debug\漢諾塔.ilk

?????文件??????27647??2012-03-09?19:43??漢諾塔移動動畫\Debug\漢諾塔.obj

?????文件????4008020??2012-03-09?19:43??漢諾塔移動動畫\Debug\漢諾塔.pch

?????文件?????533504??2012-03-09?19:43??漢諾塔移動動畫\Debug\漢諾塔.pdb

?????文件???????9632??2012-03-09?19:43??漢諾塔移動動畫\漢諾塔.cpp

?????文件???????3403??2012-03-09?19:43??漢諾塔移動動畫\漢諾塔.dsp

?????文件????????537??2012-03-09?19:45??漢諾塔移動動畫\漢諾塔.dsw

?????文件??????33792??2012-03-09?19:45??漢諾塔移動動畫\漢諾塔.ncb

?????文件??????48640??2012-03-09?19:45??漢諾塔移動動畫\漢諾塔.opt

?????文件????????748??2012-03-09?19:43??漢諾塔移動動畫\漢諾塔.plg

?????目錄??????????0??2012-03-09?19:43??漢諾塔移動動畫\Debug

?????目錄??????????0??2012-03-09?19:45??漢諾塔移動動畫

-----------?---------??----------?-----??----

??????????????5609037????????????????????15


評論

共有 條評論