ورود

View Full Version : پازل



zoltrix_66
چهارشنبه 31 مرداد 1386, 00:09 صبح
سلام
من یه برنامه ی بازی پازل رو نوشتم که برای بعضی از اعداد فقط کار میکنه اگه میشه اشکال این برنامه رو بگید
با تشکر
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#define maxstep 100
int solve(int puzzle[3][3],int a,int b,int step,int dir);
int dirs[maxstep];
int laststep;
int step;
int main()
{
int puzzle[3][3];
int i,j,x,y,k,z;
clrscr();
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("\npuzzle[%d][%d]==",i,j);
scanf("%d",&puzzle[i][j]);
if(puzzle[i][j]==8)
{
x=i;
y=j;
}
}
solve(puzzle,x,y,0,0);
for(k=0;k<=laststep;k++)
{
clrscr();
for(i=0;i<3;i++)
{
printf("\n");
for(j=0;j<3;j++)
if((x==i)&&(y==j))
printf(" ");
else
printf("%d",puzzle[i][j]);
}
getch();
switch(dirs[k])
{
case 1:
puzzle[x][y]=puzzle[x][y+1];
puzzle[x][y+1]=8;
y++;
break;
case 2:
puzzle[x][y]=puzzle[x-1][y];
puzzle[x-1][y]=8;
x--;
break;
case 3:
puzzle[x][y]=puzzle[x][y-1];
puzzle[x][y-1]=8;
y--;
break;
case 4:
puzzle[x][y]=puzzle[x+1][y];
puzzle[x+1][y]=8;
x++;
break;
// delay(1000);
}
}

getch();
return 0;
}
//****************************************
int solve(int p[3][3],int a,int b,int step, int dir)
{
int q[3][3];
int i,j,s=0;
if(step>maxstep)
return 0;
if((p[0][0]==0) && (p[0][1]==1) && (p[0][2]==2)
&&(p[1][0]==3) &&(p[1][1]==4) &&(p[1][2]==5)
&&(p[2][0]==6) && (p[2][1]==7)&&(p[2][2]==8))
{
laststep=step;
return 1;
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
q[i][j]=p[i][j];
if((b<2)&&(dir!=3))
{
q[a][b]=q[a][b+1];
q[a][b+1]=8;
b++;
dirs[step]=1;
s=solve(q,a,b,step+1,1);
if(s==0)
{
q[a][b]=q[a][b-1];
q[a][b-1]=8;
b--;
}
}
if((a>0)&&(dir!=4)&&(s==0))
{
q[a][b]=q[a-1][b];
q[a-1][b]=8;
a--;
dirs[step]=2;
s=solve(q,a,b,step+1,2);
if(s==0)
{
q[a][b]=q[a+1][b];
q[a+1][b]=8;
a++;
}
}
if((b>0)&&(dir!=1)&&(s==0))
{
q[a][b]=q[a][b-1];
q[a][b-1]=8;
b--;
dirs[step]=3;
s=solve(q,a,b,step+1,3);
if(s==0)
{
q[a][b]=q[a][b+1];
b++;
}
}
if((a<2)&&(dir!=2)&&(s==0))
{
q[a][b]=q[a+1][b];
q[a+1][b]=8;
a++;
dirs[step]=4;
s=solve(q,a,b,step+1,4);
if(s==0)
{
q[a][b]=q[a-1][b];
q[a-1][b]=8;
a--;
}
}
return s;
}

emad_67
چهارشنبه 31 مرداد 1386, 00:18 صبح
من که درست نفهمیدم که این برنامت چه جوری کار میکنه
ضمنا اگه اون تیکه از کد رو که شک داری بزاری بهتر میشه گفت که مشکلش چیه

zoltrix_66
چهارشنبه 31 مرداد 1386, 00:34 صبح
این برنامه اعداد از 0 تا 9 رو می گیره البته بهم ریخته و نا مرتب بعد باید اون رو به طور مرتب از 0 تا 9 بنویسه (((همون پازل اعداده دیگه)))

emad_67
چهارشنبه 31 مرداد 1386, 00:46 صبح
به هر حال ارور زمان اجرا میده .حالا اگه جاییش رو شک داری بزار , اینجوری خوندن تمام کد سخته

zoltrix_66
چهارشنبه 31 مرداد 1386, 01:27 صبح
نه اتفاقا اصلا ارور نمیده در ضمن اگه می دونستم که کدوم قسمتش اشکال داره که خودم رفعش می کردم