當前位置:編程學習大全網 - 源碼下載 - 漢諾塔,周期怎麽寫?

漢諾塔,周期怎麽寫?

這不是這裏嗎?妳沒什麽遠見,但妳還是很生氣。

●漢諾塔算法的非遞歸實現C++源代碼

#包括iostream

使用命名空間std

最大磁盤數量為64個。

const int MAX = 64

用於表示每列的信息。

結構st{

int s[MAX];列上的磁盤存儲

int top棧頂,用於最上面的磁盤。

字符名稱;列的名稱可以是A、B和c中的壹個。

Int Top()獲取棧頂元素。

{

return s[top];

}

Int Pop()超出堆棧。

{

return s[top –];

}

Void推入堆棧(int x)

{

s[++ top]= x;

}

} ;

long Pow(int x,int y);計算x y

void Creat(st ta[],int n);設置結構數組的初始值。

void漢諾塔(st ta[],long max);河內移動塔的主要功能

int main(void)

{

int n;

CIN n;輸入磁盤數量。

ST ta[3];三個支柱的信息存儲在結構數組中。

Creat(ta,n);設置結構數組的初始值。

long max = Pow(2,n)-1;移動的次數應該等於2 n-1。

漢諾塔(ta,max);河內移動塔的主要功能

系統(“暫停”);

返回0;

}

空創建(st ta[],int n)

{

ta[0]。name = ' A

ta[0]。top = n-1;

按照從大到小的順序將所有磁盤放在A列上。

for(int I = 0;在;i++)

ta[0]。s[I]= n-I;

B柱和c柱上壹開始沒有圓盤。

ta[1]。top = ta[2]。top = 0;

for(int I = 0;在;i++)

ta[1]。s[i] = ta[2]。s[I]= 0;

如果n是偶數,順時針方向依次放壹個B C。

如果(n%2 == 0)

{

ta[1]。name = ' B

ta[2]。name = ' C

}

否則如果n是奇數,順時針依次放A C B。

{

ta[1]。name = ' C

ta[2]。name = ' B

}

}

長冪(整數x,整數y)

{

長和= 1;

for(int I = 0;iy;i++)

sum = x;

返回總和;

}

無效漢諾塔(st ta[],long max)

{

int k = 0;累計移動次數

int I = 0;

int ch

白色(k最大值)

{

將圓盤1從當前列順時針移動到下壹列。

ch = ta[i%3]。pop();

ta[(i+1)%3]。推(ch);

cout ++k " "

將磁盤“ch”從“ta[i%3]中移動。名字

" to " ta[(i+1)%3]。名字endl

i++;

將另外兩列上的可移動磁盤移到新列中。

中頻(k最大值)

{

將非空列上的光盤移到空列。當兩列都為空時,移動較小的光盤。

if (ta[(i+1)%3]。Top() == 0

ta[(i-1)%3]。top()0 & amp;& amp

ta[(i+1)%3]。Top() ta[(i-1)%3]。Top())

{

ch = ta[(i-1)%3]。pop();

ta[(i+1)%3]。推(ch);

cout ++k " " "移動磁盤"

ch " from " ta[(i-1)%3]。名字

" to " ta[(i+1)%3]。名字endl

}

其他

{

ch = ta[(i+1)%3]。pop();

ta[(i-1)%3]。推(ch);

cout ++k " " "移動磁盤"

ch " from " ta[(i+1)%3]。名字

" to " ta[(i-1)%3]。名字endl

}

}

}

}

  • 上一篇:如何閱讀壹個Java項
  • 下一篇:VB怎麽通過串口收發數據,謝謝,我是新手,希望能附上代碼,感激
  • copyright 2024編程學習大全網