Aaron学习笔记

少壮不努力,长大没饭吃!
posts - 4, comments - 13, trackbacks - 0, articles - 37

汉诺塔(递归形式)

Posted on 2009-03-23 21:00 赞劲小子 阅读(195) 评论(0)  编辑 收藏 引用 所属分类: 算法设计与分析

 

/**
  * 汉诺塔问题将N个盘子从第一个柱子移动到第三个柱子,第二个柱子可以作为临时用的,
  *具体题目可以在网上搜到
  *算法:
  *****当N== 1时,可以直接将盘子从第一移动到第三
  *****否则:(1)  将 n-1 个塔牌从 one 经过 three 全部移动到 two // 此过程结束后,塔牌数量为 [1, n-1, 0] 
  *****(2)  将 one 移动到 three // 过过程结束后,塔牌数量为 [0, n-1, 1] 
  *****(3)  将 n-1 个塔牌从 two 经过 one 全部移动到 three // 过过程结束后,塔牌数量为 [0, 0, n]  
*
*/

#include 
"stdio.h"
#include 
"stdlib.h"
#include 
"iostream.h"

void hanoi(int n, char one, char two, char three);
void move(char x, char y);

void main(){
    
int num;
    cin 
>> num;
    hanoi(num,
'A','B','C');
}


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);
     }

}

void move(char x, char y){
    printf(
"%c---->%c\n",x,y);
}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理