acm-杂 汉诺塔
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了acm-杂 汉诺塔相关的知识,希望对你有一定的参考价值。
问题是有三个插槽,n个由小到大的盘子怎么从第一个插槽移动到第三个插槽?其中小盘子只能放在大盘子上,一次只能移动一个盘子。以3个盘子为例:
- 1号,2号移动到第二个插槽。1->2
- 3号移动到第三个插槽。1->3
- 1号,2号移动到第三个插槽。2->3
其中第二步是直接可以完成的,也就是递归出口。
第一步又可以分解为: - 1号移动到第三个插槽。1->3
- 2号移动到第二个插槽。1->2
- 1号移动到第二个插槽。3->2
第三部可以同样分解: - 1号移动到第一个插槽。2->1
- 2号移动到第三个插槽。2->3
- 1号移动到第三个插槽。1->3
一共需要移动3+1+3步,n个盘子需要n+1+n步。
因为移动n个盘子同样可以以移动3个盘子为基础来理解。
从插槽1移动n个盘子到插槽3: - 前n-1个盘子移动到插槽二。
- 第n个盘子移动到插槽三。
- 前n-1个盘子在移动到插槽三。
一步完成的直接完成,不可以直接完成的按上步分解。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int move(int n,char x,char y,char z);
printf("inter your number\n");
scanf("%d",&n);
move(n,‘a‘,‘b‘,‘c‘);
return 0;
}
int move(int n,char x,char y,char z){
if(n==1){
printf("%c-->%c\n",x,z);
}
else{
move(n-1,x,z,y);
printf("%c-->%c\n",x,z);
move(n-1,y,x,z);
}
}
以上是关于acm-杂 汉诺塔的主要内容,如果未能解决你的问题,请参考以下文章