汉诺塔问题求解
2014-08-07 21:52
232 查看
汉诺塔问题求解
问题描述:A,B,C三个柱子,其中A插着n个盘子从上到下按照小到大放,尝试以B盘子为中介,每次移一次,将A中的盘子从上到下按照小到大插;
算法:n个盘子全放在A上面,分为两步走:将前面(n-1)个盘子全部放到B上面,然后将第n个盘子放到C中;
这样子B中就有(n-1)个盘子,再以A为中介,全部放到C中。
数学建模:
设n个盘子需要放An次,
An=A(n-1)+1+A(n-1);n=a,An=1;
通过简单的迭代,即可求出An=2^n-1;
程序实现:
hanoi(n,A,B,C)
=Move(A,C) if(n=1)
hanoi(n-1,A,C,B);
Move(A,C)
hanoi(n-1,B,A,C)
问题描述:A,B,C三个柱子,其中A插着n个盘子从上到下按照小到大放,尝试以B盘子为中介,每次移一次,将A中的盘子从上到下按照小到大插;
算法:n个盘子全放在A上面,分为两步走:将前面(n-1)个盘子全部放到B上面,然后将第n个盘子放到C中;
这样子B中就有(n-1)个盘子,再以A为中介,全部放到C中。
数学建模:
设n个盘子需要放An次,
An=A(n-1)+1+A(n-1);n=a,An=1;
通过简单的迭代,即可求出An=2^n-1;
程序实现:
hanoi(n,A,B,C)
=Move(A,C) if(n=1)
hanoi(n-1,A,C,B);
Move(A,C)
hanoi(n-1,B,A,C)
#include "stdafx.h" #include "iostream" using namespace std; void move(char A,char B) { // char A,B; printf("%c-------%c\n",A,B); } void hanoi(int n,char A,char B,char C) { // int n; // char A,B,C; if(n==1) move(A,C); else { hanoi(n-1,A,C,B); move(A,C); hanoi(n-1,B,A,C); } } int main() { int n; cin>>n; // char A,B,C; hanoi(n,'A','B','C'); while(1); return 0; }运行代码如下:
相关文章推荐
- 汉诺塔问题求解
- 汉诺塔问题的求解
- 第12周项目3-用递归函数求解--汉诺塔问题
- 用栈来求解汉诺塔变形问题
- 《hanoi(汉诺塔)问题》求解
- 用递归方法求解汉诺塔问题
- 用栈来求解汉诺塔问题
- JAVA求解汉诺塔问题
- Java经典编程300例之实例047 汉诺塔问题求解(递归)
- 【java算法】汉诺塔问题求解
- java中使用递归求解汉诺塔问题
- 利用启发式搜索算法求解3阶汉诺塔问题
- 汉诺塔问题的C 语言求解分析
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 用递归方法求解汉诺塔问题。
- 汉诺塔问题的递归求解
- 汉诺塔问题的求解
- java求解汉诺塔问题示例
- 黑马程序员--汉诺塔问题的递归求解C语言
- 汉诺塔(Tower of Hanoi)问题的求解——利用栈与递归