双色河内塔是由之前所介绍过的河内塔规则衍生而来,双色河内塔的目的是将下图左上的圆环位置经移动成为右下的圆环位置:
方法:每次移动n-2个,然后确定最后2个的位置
#include<iostream>
using namespace std;
void move(int n,char a,char b,char c)
{
if(n==1)
{
cout<<a<<"-->"<<c<<endl;
cout<<a<<"-->"<<c<<endl;
}
else
{
move(n-1,a,c,b);
cout<<a<<"-->"<<c<<endl;
cout<<a<<"-->"<<c<<endl;
move(n-1,b,a,c);
}
}
void TwoColorMove(int n,char a,char b,char c)
{
int i=n/2;
for(;i>1;i--)
{
move(i-1,a,c,b);
move(1,a,b,c);
move(i-1,b,c,a);
cout<<c<<"-->"<<b<<endl;
}
cout<<a<<"-->"<<c<<endl;
cout<<a<<"-->"<<b<<endl;
}
int main()
{
int n;
cout<<"请输入盘数:"<<endl;
cin>>n;
char a='A';
char b='B';
char c='C';
cout<<"结果为:"<<endl;
TwoColorMove(n,a,b,c);
cout<<"结果为:"<<endl;
move(n,a,b,c);
system("pause");
return 0;
}