Próbuję zrobić hanoi dla 5 wież i n krążków, jednak w jakiejkolwiek robię kombinacji, to nie wychodzi poprawnie.
Ostatecznie napisałem ręcznie, jednak nie to mi chodzi i chciałbym jakoś to uogólnić, jednak nie widzę zależności:
void hanoiPiecWiezy(int n, char A, char E, char B, char C, char D)
{
if (n == 0)
return;
if (n == 1)
{
cout << A<<" " <<E<< endl;
return;
}
else
{
if (n==2)
{
hanoiPiecWiezy(n-1, A, B,C,D,E);
cout<<A << " " << D << endl;
cout << B<<" " << D<< endl;
}
if (n==3)
{
hanoiPiecWiezy(n-1, A B,C,E,D);
cout<<A<< " " <<E<<endl;
cout<<D<< " "<< E <<endl;
cout << C <<" " << E << enEdl;
}
if (n==4)
{
cout<<A << " " << B<<endl;
cout<<A << " " << C<<endl;
cout<<A << " " << D<<endl;
cout<<A << " " << E<<endl;
cout<<D << " "<< E <<endl;
cout << C <<" " << E << endl;
cout << B <<" " << E << endl;
}
if (n==5)
{
cout<<A << " " << B<<endl;
cout<<A << " " << C<<endl;
cout<<B<< " " << C<<endl;
cout<<A << " " << B<<endl;
cout<<A << " " << D<<endl;
cout<<A << " " << E<<endl;
cout<<D << " " << E<<endl;
cout<<B << " " << E<<endl;
cout<<C << " " << B<<endl;
cout<<C<< " " << E<<endl;
cout<<B << " " <<E<<endl;
}
}
}
Nie musi być po najmniejszej liczbie ruchów, byle skutecznie.
Tutaj moja niepoprawna próba uogólnienia tego algorytmu:
void hanoiPiecWiezy(int n, char A, char E, char B, char C, char D)
{
if (n == 0)
return;
if (n == 1)
{
cout << A <<" " << E << endl;
return;
}
hanoiPiecWiezy(n-3, A,B,C,D,E);
cout<<A << " " << C << endl;
cout<<A << " " << D << endl;
cout<<A << " " << E << endl;
cout << D << " "<< E << endl;
cout << C << " "<< E << endl;
hanoiPiecWiezy(n-3,B,E,A,C,D);
}
Bo ta druga funkcja dobrze działa dla 3 i 4 krążków, jednak przy innych wyrzuca błąd