/**< 2014年4月23日 */
/**< 汉诺塔 */
#include <stdio.h>
/** \brief 把第n个盘子从位置a移动到位置b
*
* \param n 盘子的编号
* \param a 源位置
* \param b 目标位置
* \return
*
*/
void move(int n, char a, char b)
{
/**< 把第n个盘子从位置a移动到位置b */
printf("move %d: %c -> %c\n", n, a, b);
}
/** \brief 汉诺塔
*
* \param n 盘子的个数
* \param a 源位置
* \param b 空闲的位置
* \param c 目标位置
* \return
*
*/
void hanoi(int n, char a, char b, char c)
{
/**< 只有一个盘子,把它直接移动过去就可以了 */
if (1 == n)
{
move(n, a, c);
return;
}
/**< 把a上面的n-1个盘子通过c移动到b上面去 */
hanoi(n-1, a, c, b);
/**< 移动第n个盘子从a到c上面去 */
move(n, a, c);
/**< 此时盘子都在b上面,再把b上面的n-1个盘子通过a移动到c上面去 */
hanoi(n-1, b, a, c);
}
int main()
{
int n = 0;
printf("请输入汉诺塔的高度:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
栈的应用-汉诺塔
最新推荐文章于 2023-04-19 23:01:46 发布