TOWER OF HANOI



#include<iostream>        //the c++ standard library for stream input output
#include<cstdio>        //the c standard library for standard input output
#include<cstdlib>        //for the exit function
using namespace std;


class arr            //arr class that holds each stag
{
    public:
    int a[100],b[100],c[100];
    int topa,topb,topc;
}hanoi;
int move=1;            //counts the no. of moves
int main()
{
    void tower(int ,int *,int *,int *,int *,int *,int *);        //function
prototype
    void show(int);                            //function prototype
    int i;
    system("clear");
    cout<<"Enter the no of elements for which u want to solve the
problem
";
    scanf("%d",&i);
    system("clear");
    for(int j=0;j<i;j++)                    //feeds the elements in the arrs;
    {
        hanoi.a[j]=j+1;
        hanoi.b[j]=-1;
        hanoi.c[j]=-1;
    }
    hanoi.topa=i-1;                        //topa,topb,topc,mean the top of each arr
    hanoi.topb=-1;
    hanoi.topc=-1;
    cout<<"        Initially "<<"
";
    for(int j=i-1;j>-1;j--)                    //show the statusm of each arr
    {
        show(hanoi.a[j]);
        show(hanoi.b[j]);
        show(hanoi.c[j]);
        cout<<"
";
    }
    cout<<"


";

tower(i,hanoi.a,hanoi.c,hanoi.b,&(hanoi.topa),&(hanoi.topc),&(hanoi.topb))
;    //call to do the job
}

void tower(int n,int src[],int dest[],int aux[],int *ts,int *td,int
*ta)
//the tower function passes
{                                        //the arrs along with the top pointers
    void show (int);
    if(n==1)                                //if one element is there in source arr ,
    {                                    //then it is moved to the destination arr,
        dest[++(*td)]=src[(*ts)];
        src[*ts]=-1;
        (*ts)--;
        int max;
        max=((*ts)>(*td)?(*ts):(*td));
        max=(max>(*ta)?max:(*ta));
        cout<<"        Move "<<move++<<"
";
        for(int i=max;i>-1;i--)                        //status of arrs shown
        {
            show(hanoi.a[i]);
            show(hanoi.b[i]);
            show(hanoi.c[i]);
            cout<<"
";
        }
        cout<<"


";
        return;
    }
    tower(n-1,src,aux,dest,ts,ta,td);                    //else the
    tower(1,src,dest,aux,ts,td,ta);                        //    problem is solved by
    tower(n-1,aux,dest,src,ta,td,ts);                    //            recursive calls

}

void show(int a)                    //the show function shows the current status of
the
arrs
{
    if(a==-1)
        cout<<"-        ";
    else
        cout<<a<<"        ";
}

No comments:

Post a Comment

 
;