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: