汉诺塔问题求解
问题描写叙述: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; }执行代码例如以下: