国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
漢諾塔問題

漢諾塔問題是使用遞歸解決問題的經(jīng)典范例。

  漢諾(Hanoi)塔問題:古代有一個梵塔,塔內(nèi)有三個座A、B、C,A座上有64個盤子,盤子大小不等,大的在下,小的在上(如圖)。有一個和尚想把這64個盤子從A座移到B座,但每次只能允許移動一個盤子,并且在移動過程中,3個座上的盤子始終保持大盤在下,小盤在上。在移動過程中可以利用B座,要求打印移動的步驟。如果只有一個盤子,則不需要利用B座,直接將盤子從A移動到C。

  • 如果有2個盤子,可以先將盤子1上的盤子2移動到B;將盤子1移動到c;將盤子2移動到c。這說明了:可以借助B將2個盤子從A移動到C,當(dāng)然,也可以借助C將2個盤子從A移動到B。
  • 如果有3個盤子,那么根據(jù)2個盤子的結(jié)論,可以借助c將盤子1上的兩個盤子從A移動到B;將盤子1從A移動到C,A變成空座;借助A座,將B上的兩個盤子移動到C。這說明:可以借助一個空座,將3個盤子從一個座移動到另一個。
  • 如果有4個盤子,那么首先借助空座C,將盤子1上的三個盤子從A移動到B;將盤子1移動到C,A變成空座;借助空座A,將B座上的三個盤子移動到C。
  代碼如下:
#include <iostream>
#include
<stdio.h>
using namespace std;

static int step = 0;
void move ( char sour, char dest )
{
printf (
"move from %c to %c \n", sour, dest );
}

void hanoi ( int n, char sour, char temp, char dest )
{
if ( n == 1 )
{
move ( sour, dest );
++step;
}
else
{
hanoi ( n
-1, sour, dest, temp );
move ( sour,dest );
++step;
hanoi ( n
-1, temp, sour, dest );
}
}
int main ( int argc, char **argv )
{
int n = 4;
hanoi ( n,
'A', 'B', 'C' );
printf (
"Total steps is %d\n", step );
return 0;
}

  

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
漢諾諾.c
漢諾塔
遞歸算法 Hanoi(漢諾)塔問題
漢諾塔問題(三柱及四柱)詳解
漢諾塔的圖解遞歸算法
關(guān)于C語言漢諾塔問題,當(dāng)程序執(zhí)行到001、002、003步時,不知道具體是個什么步驟,求大神解惑!
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服