汉诺塔问题
刚学C++,在函数那章的课后练习里看到了汉诺塔问题,我怎么就发现别人写的比我短很多呢?但是别人的好抽象,我看不懂。我感觉我这样写也对,各位高手看看。#include <iostream.h>
void way(int cengshu,int chushiweizhi,int mubiaoweizhi,int linshiweizhi)
{
if (cengshu==2)
{
cout<<chushiweizhi<<"-->"<<linshiweizhi<<endl<<chushiweizhi<<"-->"<<mubiaoweizhi<<endl<<linshiweizhi<<"-->"<<mubiaoweizhi<<endl;//递归函数的最下层条件。
}
else {
if (chushiweizhi==1&&mubiaoweizhi==3&&linshiweizhi==2)
{
way(cengshu-1,chushiweizhi,mubiaoweizhi-1,linshiweizhi+1);//汉诺塔问题任何一步可能遇到的6种情况。我这里的位置是固定的,1为初始,2为临时,3是目标
cout<<"1-->3"<<endl; //任何层数的汉诺塔问题都可以看成把N-1层从初始位置移到临时位置,
way(cengshu-1,chushiweizhi+1,mubiaoweizhi,linshiweizhi-1);//初始位置就只剩最大一层了,把它移动到目标位置,
} //然后再把临时位置的N-1层移动到目标位置。
if (chushiweizhi==1&&mubiaoweizhi==2&&linshiweizhi==3) //N层的临时位置可以看成是N-1层的初始位置...如此往复。
{
way(cengshu-1,chushiweizhi,mubiaoweizhi+1,linshiweizhi-1);
cout<<"1-->2"<<endl;
way(cengshu-1,chushiweizhi+2,mubiaoweizhi,linshiweizhi-2);
}
if (chushiweizhi==2&&mubiaoweizhi==3&&linshiweizhi==1)
{
way(cengshu-1,chushiweizhi,mubiaoweizhi-2,linshiweizhi+2);
cout<<"2-->3"<<endl;
way(cengshu-1,chushiweizhi-1,mubiaoweizhi,linshiweizhi+1);
}
if (chushiweizhi==2&&mubiaoweizhi==1&&linshiweizhi==3)
{
way(cengshu-1,chushiweizhi,mubiaoweizhi+2,linshiweizhi-2);
cout<<"2-->1"<<endl;
way(cengshu-1,chushiweizhi+1,mubiaoweizhi,linshiweizhi-1);
}
if (chushiweizhi==3&&mubiaoweizhi==1&&linshiweizhi==2)
{
way(cengshu-1,chushiweizhi,mubiaoweizhi+1,linshiweizhi-1);
cout<<"3-->1"<<endl;
way(cengshu-1,chushiweizhi-1,mubiaoweizhi,linshiweizhi+1);
}
if (chushiweizhi==3&&mubiaoweizhi==2&&linshiweizhi==1)
{
way(cengshu-1,chushiweizhi,mubiaoweizhi-1,linshiweizhi+1);
cout<<"2-->3"<<endl;
way(cengshu-1,chushiweizhi-2,mubiaoweizhi,linshiweizhi+2);
}
}
}
void main()
{
int cengshu,chushiweizhi=1,mubiaoweizhi=3,linshiweizhi=2;
cin>>cengshu;
way(cengshu,chushiweizhi,mubiaoweizhi,linshiweizhi);
}