NOI-OJ 2.2 ID:6261 汉诺塔

思路

  • 汉诺塔是递归思想最经典的例子,通过递归不断缩小问题,将n个盘子的问题简化n-1个,直至1个。

  • 三个盘子,分别为A:from,B:to,C:by(A为起点盘,B为目标盘,C为中转盘)

  • 过程

    1. 将1~n-1号盘子从A移动到C,借助B,递归进行
    2. 将第n号盘子从A移动到B
    3. 将1~n-1号盘子从C移动到B,借助A,递归进行
    • 当n==1时,直接将其从A移动到B

例程

#include <iostream>
using namespace std;
//A:from    B:to    C:by
void hanoi(int n, char A, char B, char C){
	//只有1个的话,从from移动到to 
	if(n==1){
		printf("%c->%d->%c\n", A, n, B);
		return;
	}
	//将前n-1个从from借助to移动到by 
	hanoi(n-1, A, C, B);
	//将第n个从from移动到to 
	printf("%c->%d->%c\n", A, n, B);
	//将前n-1个从by借助from移动到to 
	hanoi(n-1, C, B, A);
	return;
}
int main(){
	int  n;
	char from, to, by;
	scanf("%d %c %c %c", &n, &from, &to, &by);
	hanoi(n, from, to, by);
	return 0;
}
posted @ 2017-04-14 17:33  LFYZOI题解  阅读(397)  评论(0编辑  收藏  举报