汉诺塔

汉诺塔问题:

有3个座A,B,C 每次只能移动一个盘,要实现64个盘子从A移到C上,64个盘子在A上从小到大,在移动过程中要保持始终盘子从小到大,要求编程输出移动的顺序

问怎么移动64个盘子,A-->C,借助B?

先实现上面的63个移动到B上,将最后一个盘子直接从A移到C上 ,再将63个盘子从B移到C

问怎么移动63个盘子,A-->B,借助C?

先实现上面的62个移动到C上,将最后一个盘子直接从A移到B上 ,再将62个盘子从C移到B

 

 

怎么移动3个盘子????前3个操作借助C,后3个操作借助A

A-->C

A-->B

C-->B

A-->C

B-->A

B-->C

A-->C

由此可见,将n个盘子从A移到C上可表示为

  1. 将A上n-1个盘子借助C移到B上
  2. 将A上一个盘子移到C
  3. 将B上n-1个盘子借助A移到C上
    //汉诺塔
    #include<stdio.h>
    void move(char one,char two){
    	printf("%c-->%c\n",one,two);
    } 
    void hanoi(int n,char one,char two,char three){
    	if(n==1) move(one,three);
    	else{
    		hanoi(n-1,one,three,two);
    		move(one,three);
    		hanoi(n-1,two,one,three);
    	}
    }
    int main(){
    	int n;
    	scanf("%d",&n);
    	hanoi(n,'A','B','C');
    	return 0; 
    } 

     

发布了34 篇原创文章 · 获赞 3 · 访问量 9331
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览