//漢諾塔的規則
大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上,并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤
下面進行圖片演示//第一次移動,要把A柱子上的前n-1個移動到B柱子上;(圖1)
//第二次移動,直接把A柱子上的最后一個移動到C柱子上;(圖2)
//第三次移動,把B柱子上的n - 1個柱子通過柱子A移動到柱子C上,圖三

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//首先說明一點 我們寫的遞回一定要講究 相似之處 并且所有的事件都會歸一 會為你想完成的那件事情服務 這就是遞回 并且遞回一定要有一個靠近的點
//第一次移動,要把A柱子上的前n-1個移動到B柱子上;(圖1)
//第二次移動,直接把A柱子上的最后一個移動到C柱子上;(圖2)
//第三次移動,把B柱子上的n - 1個柱子通過柱子A移動到柱子C上,
//不管你要移動多少 總會有這個步驟進行 操作 所以我們可以依照這個操作 并且
//所以寫的步驟都不會沖突的
void hanoi(int n,char a,char b,char c)
{
if (n == 1)
{
printf("%c->%c", a, c);//這個位置出現 是為了說明當只有一個的時候 我們的移動操作程序 直接移動
}
//以下三個代碼就是我們實作的思路方法
else
{
hanoi(n - 1, a, c, b);//A柱子上的前n-1個移動到B柱子上
printf("%c->%c", a, c);//直接把A柱子上的最后一個移動到C柱子上 這個是唯一一個進行列印的步驟 也就是說 真正進行列印的步驟 注意我們的a c不是剛剛的 a c了需要注意一下才行
hanoi(n - 1, b, a, c);//這個代表將把B柱子上的n - 1個柱子通過柱子A移動到柱子C上
}
}
int main()
{
int n = 0;
scanf("%d", &n);//這里確定是寫幾個盤子 進行
hanoi(n, 'A', 'B', 'C');
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299625.html
標籤:其他
