经典算法-汉诺塔
来源:互联网 发布:华润五丰待遇知乎 编辑:程序博客网 时间:2024/05/01 12:01
百度百科:
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
设三根柱子,A,B,C.
当盘数为1时,
A1->C
当盘数为2时,
A1->B
A2->C
B1->C
当盘数为3时,
A1->C
A2->B
C1->B
A3->C
B1->A
B2->C
A1->C
归纳法:
当盘数为n时:
A的(n-1)个盘->B
An->C
B的(n-1)个盘->C
此时,可用递归解决问题
public class Test {public int count = 0;public static void main(String[] args) {Test t = new Test();t.hanoi(4, 'A', 'B', 'C');System.out.println("Total: " + t.count);}public void hanoi(int n,char A,char B,char C){if(n == 1){++count;System.out.println((char)A + " " + n + " -> " + C);}else{hanoi(n-1,A,C,B);++count;System.out.println((char)A + " " + n + " -> " + C);hanoi(n-1,B,A,C);}}}
#include <iostream>using namespace std;void hanoi(int n,char A,char B,char C);int count = 0;int main(){ hanoi(4,'A','B','C'); cout << "Total: " << count << endl; return 0;}void hanoi(int n,char A,char B,char C){ if(n == 1) { ++count; cout << A << " " << n << " -> " << C << endl; } else { hanoi(n-1,A,C,B); ++count; cout << A << " " << n << " -> " << C << endl; hanoi(n-1,B,A,C); }}
0 0
- 经典算法之汉诺塔
- 【经典算法】汉诺塔
- 经典算法~~汉诺塔
- 经典算法-汉诺塔
- 经典递归算法,汉诺塔
- 汉诺塔算法(经典递归)
- 经典汉诺塔算法
- 经典汉诺塔递归算法
- 递归经典算法 汉诺塔问题
- Python汉诺塔算法(经典递归)
- 经典算法
- 经典算法
- 经典算法
- 经典算法
- 经典算法
- 经典算法
- 经典算法
- 经典算法
- Codeforces Round #295 (Div. 2) A. Pangram
- 最简单的视频网站(JavaEE+FFmpeg)
- expect脚本入门
- Codeforces Beta Round #57 (Div. 2)E---Enemy is weak(树状数组+离散化)
- Unity与全息投影
- 经典算法-汉诺塔
- Jsoup登录解析网页信息
- Android架构(一)
- table 固定表头、列头
- 互斥锁与条件变量的配合!
- POJ 3169 Layout (Bellman-Ford、差分约束)
- freemarker技术入门例子(结合struts2)
- hdoj 2041 超级楼梯
- 蓝桥杯 填符号凑算式 趣味运算 DFS枚举 字符串处理