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