|
Posted on 2009-03-23 21:00 赞劲小子 阅读(211) 评论(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);
}
|