PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : برنامه معمای 8 (پازل 8)



آبجی
25th April 2010, 01:11 PM
#include
#include
#include
#include
#include

#define TRUE 1
#define FALSE 0

unsigned int a,b,c,d,e,f,g,h;
void main(void)
{
unsigned char chk_crash(unsigned char,unsigned char,unsigned char);
void draw_puzzle(void);
clrscr();
for (a=1;a<=8;a++);
for (b=1;b<=8;b++);
if (chk_crash(a,b,1))
for (c=1;c<=8;c++)
if ((chk_crash(c,b,1)) && (chk_crash(c,a,2)))
for (d=1;d<=8;d++)
if ((chk_crash(d,c,1)) && (chk_crash(d,b,2)) && (chk_crash(d,a,3)))
for(e=1;e<=8;e++)
if ((chk_crash(e,d,1)) && (chk_crash(e,c,2)) && (chk_crash(e,b,3)) && (chk_crash(e,a,4)))
for (f=1;f<=8;f++)
if ((chk_crash(f,e,1)) && (chk_crash(f,d,2)) && (chk_crash(f,c,3)) && (chk_crash(f,b,4)) && (chk_crash(f,a,5)))
for (g=1;g<=8;g++)
if ((chk_crash(g,f,1)) && (chk_crash(g,e,2)) && (chk_crash(g,d,3)) && (chk_crash(g,c,4)) && (chk_crash(g,b,5)) && (chk_crash(g,a,6)))
for (h=1;h<=8;h++)
if ((chk_crash(h,g,1)) && (chk_crash(h,f,2)) && (chk_crash(h,e,3)) && (chk_crash(h,d,4)) && (chk_crash(h,c,5)) && (chk_crash(h,b,6)) && (chk_crash(h,a,7)))
{
draw_puzzle();
getch();
}
getch();
}
unsigned char chk_crash(unsigned char i,unsigned char j,unsigned char d)
{
if ((i==j) || (abs(i-j)==d))
return(FALSE);
else
return(TRUE);
}
void draw_puzzle(void)
{
unsigned char a1,b1,a2,b2,i,v;
clrscr();
for (a1=1;a1<=16;a1++)
for (b1=18;b<=65;b1++)
{
gotoxy(b1,a1+d);
a2=(a1-1)/2+1;
b2=(b1-18)/6+1;
if (((a2+b2)%2)==0)
textcolor(11);
else
textcolor(1);
cprintf("A\0");
for (i=0;i<8;i++)
{
switch(i)
{
case 0:{v=a;break;}
case 1:{v=b;break;}
case 2:{v=c;break;}
case 3:{v=d;break;}
case 4:{v=e;break;}
case 5:{v=f;break;}
case 6:{v=g;break;}
case 7:{v=h;break;}
}
gotoxy(15+6*v,5+i*2);
cprintf("*\0");
}
}
}

آبجی
25th April 2010, 01:21 PM
دو PDF برای حل این مسئله در اینجا قرار می دهم.
توجه کنید که این مسئله به روش A* حل شده.



معمای 8 (http://barnamenevis.org/forum/attachment.php?attachmentid=15020&d=1204279307)

آبجی
25th April 2010, 01:24 PM
این هم یه سورس دیگه :::



#include<conio.h>
#include<math.h>
#include<stdio.h>
#pragmahdrstop
char pre_move;
int a[3][3];
int goal[3][3];
int zero_i,zero_j;
int stack[1000000];
int pop=0;
void find_zero();
void puzzle();
void exchange(int,int,int,int);
int h1();
int h2();
void output();
void input();
void save_Q(char);
void insert_goal();
#pragma argsused
//---------------------------------------------------------------------------int main()
{
input();
insert_goal();
puzzle();
getch();
return 0;
}
//**************************void insert_goal()
{
int i,j,s=1;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(i==2&&j==2)
s=0;
goal[i][j]=s;
s++;
}
}
//**************************void find_zero()
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a[i][j]==0)
{
zero_i=i;
zero_j=j;
}
}
//**************************void exchange(int i,int j,int x,int y)
{
int temp;
temp=a[i][j];
a[i][j]=a[x][y];
a[x][y]=temp;
}
//**************************void input()
{
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("enter number in [%d][%d]:\n",i,j);
scanf("%d",&a[i][j]);
if(a[i][j]<0||a[i][j]>8)
{
printf("WRONG DIGIT!!!");getch();
exit(0);
}
}
printf("/nplease wait...");
}
//******************************int h1()
{
int s=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a[i][j]==goal[i][j])
s++;
return s;
}
//******************************int h2()
{
int s,m,i,j,x,y;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(a[i][j]==goal[i][j])
s=0;
else
{
x=i,y=j;
while(a[i][j]!=goal[x][y])
{
x++;
if(x==3)
{
x=0;
y++;
}//end of if
if(y==3)
y=0;
}//end of while
s=(abs(x-i)+abs(y-j));
}//end of else
m+=s;
}//end of for(j)
return m;
}
//********************************void puzzle()
{
char next_move='h';int rh1,rh2,lh1,lh2,uh1,uh2,dh1,dh2,bh1,bh2;find_zero( );
if(h1()==9)
output();
if(zero_j!=2&&pre_move!='l')
{
exchange(zero_i,zero_j,zero_i,zero_j+1);
rh1=h1();rh2=h2();next_move='r';
bh1=rh1;bh2=rh2;
exchange(zero_i,zero_j,zero_i,zero_j+1);
}
if(zero_j!=0&&pre_move!='r')
{
exchange(zero_i,zero_j,zero_i,zero_j-1);
lh1=h1();lh2=h2();
if(lh2<bh2||next_move=='h')
{
next_move='l';bh1=lh1;bh2=lh2;
}
exchange(zero_i,zero_j,zero_i,zero_j-1);
}
if(zero_i!=0&&pre_move!='d')
{
exchange(zero_i,zero_j,zero_i-1,zero_j);
uh1=h1();uh2=h2();
if(uh2<bh2||next_move=='h')
{
next_move='u';bh1=uh1;bh2=uh2;
}
exchange(zero_i,zero_j,zero_i-1,zero_j);
}
if(zero_i!=2&&pre_move!='u')
{
exchange(zero_i,zero_j,zero_i+1,zero_j);
dh1=h1();dh2=h2();
if(dh2<bh2||next_move=='h')
{
next_move='d';bh1=dh1;bh2=dh2;
}
exchange(zero_i,zero_j,zero_i+1,zero_j);
}
pre_move=next_move;
switch ((next_move)){
case'l':
exchange(zero_i,zero_j,zero_i,zero_j-1);
save_Q(next_move);
puzzle();
break;
case'r':
exchange(zero_i,zero_j,zero_i,zero_j+1);
save_Q(next_move);
puzzle();
break;
case'u':
exchange(zero_i,zero_j,zero_i-1,zero_j);
save_Q(next_move);
puzzle();
break;
case'd':
exchange(zero_i,zero_j,zero_i+1,zero_j);
save_Q(next_move);
puzzle();
break;
default:
printf("ERROR!!!");
exit(0);
}//end of switch
}//***********************************void output()
{
int i;
printf("\n");
for(i=0;i<=pop;i++)
printf("%c",stack[i]);
printf("\njob's done!!!");
getch();
exit(0);
}
//***********************************void save_Q(char c)
{
pop++;
if(pop==1000000)
{
printf("\nOVERFLOW!!!");
exit(0);
}
stack[pop]=c;
}

جواد حیاتی
17th June 2010, 06:40 PM
با سلام
من معمای 8 رو به سه روش متفاوت لازم دارم.لطفا کمک کنید...

جواد حیاتی
17th June 2010, 06:45 PM
با سلام
من حل معمای 8 رو به سه روش مختلف لازم دارم.لطفا کمک کنید...
اگه دارید، برای من ارسال کنید
javad_hayati@yahoo.com

آبجی
17th June 2010, 07:28 PM
با سلام
من معمای 8 رو به سه روش متفاوت لازم دارم.لطفا کمک کنید...


با سلام
من حل معمای 8 رو به سه روش مختلف لازم دارم.لطفا کمک کنید...
اگه دارید، برای من ارسال کنید
javad_hayati@yahoo.com

سلام دوست گرامی چند روش ذکر شده ضمن اینکه طبق قانون شماره 5 اطلاعیه ( لطفا قبل از زدن پست مطالعه کنید ) (http://njavan.com/forum/announcement.php?f=142)


5- هیچ ایمیلی از طرف کادر مدیران و همکاران سایت علمی نخبگان برای کاربران ارسال نمیشود .

و طبق قانون شماره 6


6- هیچ پروژه ای از سمت مدیران و همکاران برای کاربران سایت تهیه و انجام نمیشود ما فقط موظف به راهنمایی شما عزیزان هستیم نه انجام پروژه و حل تمرینات شما عزیزان پس لطفا قبل از زدن پست این نکته رو رعایت کنید

موفق باشید .

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد