Musze napisać kod do problemu wieży hanoi. Chce napisac go rekurenczyjnie.Robie to na vectorach. Mam vectory a,b,c (int) oznaczajace kolejno slupki 1,2,3. W mainie wczytuje n, i potem n razy push_back do vectora a liczbe n-i; wiec po tej operacji np dla n=3 tak wyglada vector a:
1
2
3
Pisze pionowo aby latwiej było wyobrazic sobie wieże. (im wieksza liczba tym wieksza szerokosc)
No i teraz moj problem chce napisac funkcje ktora przeniesie mi te wartosci z kontenera a do kont c zgodnie z zasadami problemu. Rozumiem jak działa ten algorytm ale nie wiem jak go napisac. Na razie moja proba (bo podobne przeczytałem na wikipedia) wygląda tak:
#include <iostream>
#include <vector>
using namespace std;
vector<int>a;
vector<int>b;
vector<int>c;
void WA(int n,vector<int>& A)
{
cout<<"Slupek A "<<endl;
cout<<endl;
for(int i =n-1;i>=0;i--)
{
if(A[i]>0) cout<<A[i]<<endl;
}
cout<<endl;
}
void WB(int n,vector<int>& B)
{
cout<<"Slupek B "<<endl;
cout<<endl;
for(int i =n-1;i>=0;i--)
{
if(B[i]>0) cout<<B[i]<<endl;
}
cout<<endl;
}
void WC(int n,vector<int>& C)
{
cout<<"Slupek C "<<endl;
cout<<endl;
for(int i =n-1;i>=0;i--)
{
if(C[i]>0) cout<<C[i]<<endl;
}
cout<<endl;
}
void hanoi(vector<int>& a,vector<int>& b,vector<int>& c,int n)
{
if(n>0)
{
hanoi(a,c,b,n-1);
//swap(a[a.size()-1],c[c.size()-1]);
c.push_back(a.back());
a.pop_back();
hanoi(b,a,c,n-1);
}
}
int n,x;
int main()
{
cin>>n;
cout<<endl;
for(int i =0;i<n;i++)
{
a.push_back(n-i);
b.push_back(0);
c.push_back(0);
}
WA(n,a);
WB(n,b);
WC(n,c);
cout<<"====================================="<<endl;
cin>>x;
hanoi(a,b,c,n);
WA(n,a);
WB(n,b);
WC(n,c);
return 0;
}