PDA

View Full Version : مشکل فوری با برج هانوی



mehrayaneh
چهارشنبه 13 اردیبهشت 1391, 00:16 صبح
سلام من برج هانوی رو با ساختار شرطی نوشتم اما مشکل داره نمیدونم از کجا خواهشا راهنمایی کنید
ضمنا کامپایلرش ++dev c هستش
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int i,j,k,l,a=1,b=0,c=0,topa,topb,topc,n;
cin>>n;
if(n%2==0)
a=2;
int x[n],y[n],z[n];
for(i=n-1;i>=0;i++)
{
a=a+1;
x[i]=a;
}
for(i=0;i>=n-1;i++)
{
y[i]=n;
z[i]=n;
}
topa=n-1;
topb=0;
topc=0;
for(i=1;i>=0;i++)
{
for(j=1;j>=0;j++)
{
if(topa<0)
topa=0;
if(topb<0)
topb=0;
if(topc<0)
topc=0;
if(a%2==0&&x[topa]<y[topb]&&x[topa]<z[topc])
{
cout<<"a --> b";
y[topb]=x[topa];
x[topa]=n;
a=a+1;
b=b+1;
topa=topa-1;
topb=topb+1;
}
else if(a%2!=0&&x[topa]<y[topb]&&x[topa]<z[topc])
{
cout<<"a --> c";
z[topc]=x[topa];
x[topa]=n;
a=a+1;
c=c+1;
}
else if(x[topa]<y[topb]&&x[topa]>z[topc])
{
cout<<"a --> b";
y[topb]=x[topa];
x[topa]=n;
a=a+1;
b=b+1;
topa=topa-1;
topb=topb+1;
}
else if(x[topa]<y[topb]&&x[topa]>z[topc])
{
cout<<"a --> c";
z[topc]=x[topa];
x[topa]=n;
a=a+1;
c=c+1;
}
else;
break;
}
if(topc==n-1)
break;
for(k=1;k>=0;k++)
{
if(topa<0)
topa=0;
if(topb<0)
topb=0;
if(topc<0)
topc=0;
if(b%2==0&&y[topb]<x[topa]&&y[topb]<z[topc])
{
cout<<"b --> a";
x[topa]=y[topb];
y[topb]=n;
b=b+1;
a=a+1;
topb=topb-1;
topa=topa+1;
}
else if(b%2!=0&&y[topb]<x[topa]&&y[topb]<z[topc])
{
cout<<"b --> c";
z[topc]=y[topb];
y[topb]=n;
b=b+1;
c=c+1;
}
else if(y[topb]<x[topa]&&y[topb]>z[topc])
{
cout<<"b --> a";
x[topa]=y[topb];
y[topb]=n;
b=b+1;
a=a+1;
topb=topb-1;
topa=topa+1;
}
else if(y[topb]<x[topa]&&y[topb]>z[topc])
{
cout<<"b --> c";
z[topc]=y[topb];
y[topb]=n;
b=b+1;
c=c+1;
}
else;
break;
}
if(topc==n-1)
break;
for(l=1;l>=0;l=l+1)
{
if(topa<0)
topa=0;
if(topb<0)
topb=0;
if(topc<0)
topc=0;
if(c%2==0&&z[topc]<x[topa]&&z[topc]<y[topb])
{
cout<<"c --> a";
x[topa]=z[topc];
z[topc]=n;
c=c+1;
a=a+1;
topc=topc-1;
topa=topa+1;
}
else if(c%2!=0&&z[topc]<x[topa]&&z[topc]<y[topb])
{
cout<<"c --> b";
y[topb]=z[topc];
z[topc]=n;
c=c+1;
b=b+1;
}
else if(z[topc]<x[topa]&&z[topc]>y[topb])
{
cout<<"c --> a";
x[topa]=z[topc];
z[topc]=n;
c=c+1;
a=a+1;
topc=topc-1;
topa=topa+1;
}
else if(z[topc]<x[topa]&&z[topc]>y[topb])
{
cout<<"c --> b";
y[topb]=z[topc];
z[topc]=n;
c=c+1;
b=b+1;
}
else;
break;
}
if(topc==n-1)
break;
system("PAUSE");
return EXIT_SUCCESS;}}

jannatmakan
چهارشنبه 13 اردیبهشت 1391, 02:57 صبح
سلام. این برنامه ی برج هانوی البته با تابع بازگشتی است.
در واقع اگر در مورد تابع بازگشتی اطلاعاتی ندارید، حتماً کسب کنید چون مسئله ی برج هانوی بدون تابع بازگشتی، کلی کد نیاز داره ولی با تابع بازگشتی، 6 الی 8 خط بیشتر نمی شه!!!
یعنی برج هانوی مصداق بارز نشان دادن قدرت تابع بازگشتی در کم کردن کد است.
اینم برنامش که تفاوت های کوچولوش رو هم می تونید درست کنید مثل name space و غیره.


#include<iostream.h>
#include<conio.h>

void hanoi(int topn,char src,char aux,char dest)
{
if(topn==1)
{

cout<<"\nDisk 1 from "<<src<<" to "<<dest;
}
else
{
hanoi(topn-1,src,dest,aux);
cout<<"\nDisk "<<topn<<" from "<<src<<" to "<<dest;
hanoi(topn-1,aux,src,dest);
}
}

int main()
{
clrscr();
int n;
cout<<"Please enter number of disks :";
cin>>n;
hanoi(n,'A','B','C');
getch();
return 0;
}

mehrayaneh
شنبه 16 اردیبهشت 1391, 17:52 عصر
ببخشید کسی میتونه ساده به من بگه برج هانوی رو چطوری بنویسم یعنی فرمولش چیه؟