五行代码解决汉诺塔(Java、C++)

原题:

汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?

思路:

(1)如果只有一个盘子,直接从 起始盘 移动到 终点盘
(2)如果n个盘子:
第一步:先将n-1个盘子,从起始盘经过终点盘移动到中转盘
第二步:将第n个盘子,从 起始盘 移动到 终点盘
第三步:再将n-1个盘子,从中转盘经过起始盘移动到终点盘

Java 源码:

package 形而上学;
public class Hanoi {
	static int i;
	static void hanoi(int n,String qi,String via,String zhong) {
		if(n==1) {
			i++;
			System.out.println(qi+"---->"+zhong);
		}
		else {
			hanoi(n-1,qi,zhong,via);
			hanoi(1,qi,via,zhong);
			hanoi(n-1,via,qi,zhong);
		}
	}
	public static void main(String[] args) {		
		hanoi(7,"A","B","C");
		System.out.println("共移动"+i+"次");
	}
}

C++源码:

#include<bits/stdc++.h>
using namespace std;
int i;
void hanoi(int n,char qi,char via,char zhong)
{
    if(n==1)
    {
        i++;
        cout<<qi<<"--->"<<zhong<<endl;
    }
    else
    {
        hanoi(n-1,qi,zhong,via);
        hanoi(1,qi,via,zhong);
        hanoi(n-1,via,qi,zhong);
    }
}
int main()
{
    hanoi(7,'A','B','C');
    cout<<"共移动"<<i<<"次";
}

其实有用的仅仅那5行,对吧???
留下你的答案 ^ - ^

发布了84 篇原创文章 · 获赞 5 · 访问量 3548

猜你喜欢

转载自blog.csdn.net/qq_44824148/article/details/104369074