/*----------------------------------------------------------------------
* Project: Hanoi.cpp
* Name: zwp
* Date: 2013.4
*----------------------------------------------------------------------*/
#include <iostream>
#include <iomanip>
/*
** 注意为了记下移动的次数使用了 应用传递
*/
void move(unsigned num, unsigned& movenumbers, char source, char destination, char spare);
int main(void)
{
/*
** 三个柱子
*/
const char PEC1 = 'A';
const char PEC2 = 'B';
const char PEC3 = 'C';
unsigned movenumbers = 0; // 初始化移动次数为0
std::cout <<"Please input number of disks: "<<std::endl;
unsigned disks; // 盘子数目
std::cin >>disks;
move(disks, movenumbers, PEC1, PEC2, PEC3);
system("pause");
return 0;
}
void move(unsigned num, unsigned& movenumbers, char source, char destination, char spare)
{
if(num == 1) // 只有一个盘子
{
movenumbers++;
std::cout <<std::setw(3)<<movenumbers<<" Move the top disk from "<<source<<" to "<<destination<<std::endl;
}
else
{
move(num - 1, movenumbers, source, spare, destination); // 先把num-1个盘子从'A' 移动到 'C'
move(1, movenumbers, source, destination, spare); // 再把剩下的1个盘子从'A'移动到 'B'
move(num - 1, movenumbers, spare, destination, source); // 之后把num-1个盘子从'C'移动到 'B'
}
}
心动C++情牵汉洛塔
最新推荐文章于 2020-12-29 06:15:32 发布