Wieża Hanoi na vectorach

0

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;
}
 
0
c.push_back(a.back());
a.pop_back();
0

Pelny kod:

#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;
} 
0
  1. Do vectorów b i c nie wrzucaj nic mają zostać puste.
  2. WA(), WB(), WC() zamień na jedną funkcję:
void show(const vector<int> &v,const char *name)
  {
   cout<<"Slupek "<<name<<':';
   for(auto i:v) cout<<' '<<v;
   cout<<endl;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1