واضح آرشیو وب فارسی:سایت ریسک: یک مسابقه یک جایزه shr6557 18 آذر 1384, 09:48سلام من یه مسابقه که همچین سخت هست رو می گم یه جایزه هم براش گذاشتم اونم یه مجموعه سی دی king 2006 حاوی 12 سی دی (معادل 12000 تومان) سوال از این قرار هست یک اسب چگونه می تونه از یک خانه شطرنج حرکتش رو شروع کنه و بدون اینکه خانه تکراری ای رو بره تمام خانه ها ی شطرنج رو طی کنه یعنی با 63 حرکت 64 خانه شطرنج رو طی کنه اینکه از چه خانه ای شروع بشه فرقی نداره من این برنامه رو نوشتم با تابع بازگشتی ولی این برنامه ای که من نوشتم خیلی کنده یعنی شاید چند روز هم کار کنه تموم نشه شما باید برنامه این بنویسید که از الگوریتم دیگه ای استفاده کنه و بتونه تمام حالات رو حساب کنه لطفا درمورد این که برنامه من چطوری کار می کنه نپرسید چون توضیح توی این کادر های تایپی سخت هست #include<iostream.h> #include<math.h> #include<conio.h> int table[8*8],nm=0; void l2l(int number); int main() { for (int i = 0 ; i <= 8*8-1 ; i++) table[i]=0; l2l(14); return 0; } void l2l(int number) { table[number]=1; nm++; if (nm>8*8) cout << "Find One" << endl; if(table[number + (8-2)] == 0 && (number + (8-2)) < 8*8 && (number + (8-2)) >= 0) l2l(number + (8-2)); if(table[number + (8+2)] == 0 && (number + (8+2)) < 8*8 && (number + (8+2)) >= 0) l2l(number + (8+2)); if(table[number + (2*8-1)] == 0 && (number + (2*8-1)) < 8*8 && (number + (2*8-1)) >= 0) l2l(number + (2*8-1)); if(table[number + (2*8+1)] == 0 && (number + (2*8+1)) < 8*8 && (number + (2*8+1)) >= 0) l2l(number + (2*8+1)); if(table[number - (8-2)] == 0 && (number - (8-2)) < 8*8 && (number - (8-2)) >= 0) l2l(number - (8-2)); if(table[number - (8+2)] == 0 && (number - (8+2)) < 8*8 && (number - (8+2)) >= 0) l2l(number - (8+2)); if(table[number - (2*8-1)] == 0 && (number - (2*8-1)) < 8*8 && (number - (2*8-1)) >= 0) l2l(number - (2*8-1)); if(table[number - (2*8+1)] == 0 && (number - (2*8+1)) < 8*8 && (number - (2*8+1)) >= 0) l2l(number - (2*8+1)); table[number]=0; nm--; } aira 18 آذر 1384, 14:30ديگه وقتي حرفي جايزه ميشه نميشه وقت رو تلف كرد آقا من رفتم حلش كنم....خدا به دادم برسه.......:shock: saalek110 18 آذر 1384, 15:04من قبلا يك شطرنج باز كامل نوشته بودم كه كار هم مي كرد. ولي فعلا فكر نكنم حريف رقبا بشم. حريف قدره!! . zfarhad 2003 18 آذر 1384, 19:42واقعا این مسابقه فکر جالبیه. حالا جدای از جایزه اش که فکر نکنم کسی بدش بیاد مسئله ای رو هم که گفتین ارزش فکر کردن رو داره. در هرحال من هم سعی می کنم یه الگوریتمی براش پیدا کنم. البته با اجازه اساتید. shr6557 09 دي 1384, 10:45پس چی شد!؟ saalek110 09 دي 1384, 12:57من كه از اول به نفع بقيه خودم را كنار كشيدم. . aira 10 دي 1384, 20:48من برنامشو نوشتم ولي يكي دوتا ايراد داره.رفعش كردم ميزارم به زودي:d saalek110 11 دي 1384, 16:11ما كه رديم . ولي قوانين بازي را ميشه باز بگيد. ميشه مهره از يك خانه چند بار عبور كنه؟ . shr6557 11 دي 1384, 20:33اگه بالا رو بخونی می بینی که نمی تونه یک خونه رو چند بار بره shr6557 13 دي 1384, 14:59منتظر جواب aira هستم اگر وقت نمی کنی ایراداش رو رفع کنی ایده کلی تو بگو aira 15 دي 1384, 19:26بالاخره حلش كردم.البته ببخشيد ديرشد.آخه امتحان داشتم.البته بايد اعتراف كنم به تنهايي حل نكردم و از استادم هم كمك گرفتم.(خيلي هم زياد!!:D ) من با تابع و كلاس حلش كردم.يعني به برنامه مختصات صفحه رو دادم و اينجوري مختصات حركت مهره رو برنامه دباگ ميكنه. اسب در صفحه شطرنج به صورت Lحركت مي كنه يعني در تو خانه اي كه هست براي حركت 2خانه به جلو و 2خانه در جهت عمود بر حركت قبلي ميرود.صفحه شطرنج رو با يك آرايه دو انديسي(a) مشخص مي كنيم ومقدار اوليه 0 ميديم.يك شمارنده هم از 1تا 64 انتخاب مي كنيم.تا اينجاش راحته اونجايي سخت ميشه كه ميخواي چهارگوشه صفحه رو در نظر بگيري.براي اين كار هم دسته بندي كردن صفحه شطرنج هست.فكر كنم متوجه شديد... جايزه فراموش نشه... :cool: :oops: #include<iostream.h> #include<conio.h> class chess { int i; int j; int k; int l; int n; int m; int a[8][8]; public: void g0(); int g1(); int g2(); void g3(int); void g4(); }a; void chess::g0() { for(i=0;i<8;i++) for(j=0;j<8;j++) a[i][j]=0; cout<<"Enter position i:"<<" "; cin>>k; cout<<endl<<"Enter position j:"<<" "; cin>>l; a[k][l]=1; cout<<endl; cout<<"("<<k<<","<<l<<")"<<" "; } int chess::g1() { int v,s[8]; for(i=0;i<8;i++) s[i]=8; n=k+1; m=l-2; if(n<8 & m>=0) if(a[n][m]==0) s[0]=g2(); n=k+2; m=l-1; if(n<8 & m>=0) if(a[n][m]==0) s[1]=g2(); n=k+2; m=l+1; if(n<8 & m<8) if(a[n][m]==0) s[2]=g2(); n=k+1; m=l+2; if(n<8 & m<8) if(a[n][m]==0) s[3]=g2(); n=k-1; m=l+2; if(n>=0 & m<8) if(a[n][m]==0) s[4]=g2(); n=k-2; m=l+1; if(n>=0 & m<8) if(a[n][m]==0) s[5]=g2(); n=k-2; m=l-1; if(n>=0 & m>=0) if(a[n][m]==0) s[6]=g2(); n=k-1; m=l-2; if(n>=0 & m>=0) if(a[n][m]==0) s[7]=g2(); v=8; for(i=0;i<8;i++) if(v>s[i]) { v=s[i]; j=i; } return j; } int chess::g2() { int x,y,z=0; x=n+1; y=m-2; if(x<8 & y>=0) if(a[x][y]==0) z++; x=n+2; y=m-1; if(x<8 & y>=0) if(a[x][y]==0) z++; x=n+2; y=m+1; if(x<8 & y<8) if(a[x][y]==0) z++; x=n+1; y=m+2; if(x<8 & y<8) if(a[x][y]==0) z++; x=n-1; y=m+2; if(x>=0 & y<8) if(a[x][y]==0) z++; x=n-2; y=m+1; if(x>=0 & y<8) if(a[x][y]==0) z++; x=n-2; y=m-1; if(x>=0 & y>=0) if(a[x][y]==0) z++; x=n-1; y=m-2; if(x>=0 & y>=0) if(a[x][y]==0) z++; return z; } void chess::g3(int j) { if(j==0) { k+=1; l-=2; } else if(j==1) { k+=2; l-=1; } else if(j==2) { k+=2; l+=1; } else if(j==3) { k+=1; l+=2; } else if(j==4) { k-=1; l+=2; } else if(j==5) { k-=2; l+=1; } else if(j==6) { k-=2; l-=1; } else if(j==7) { k-=1; l-=2; } } void chess::g4() { a[k][l]=1; cout<<"("<<k<<","<<l<<")"<<" "; } void main() { clrscr(); int o=0; a.g0(); while(o++!=63) { a.g3(a.g1()); a.g4(); } getch(); } shr6557 15 دي 1384, 21:16خسته نباشی ، چشم فراموش نمیشه FOAD_NIK 21 ارديبهشت 1386, 06:21توجّه سلام بالاخره پیدا کردم... اگه دوست داشتید برای دریافت سورس برنامه و لینک مرجع به من ایمیل بزنید. [email protected] 11248 FOAD_NIK 21 ارديبهشت 1386, 06:23سورس من کاملا" متفاوت است. درضمن از سی پلاس پلاس استفاده کرده ام. MnavidM 21 ارديبهشت 1386, 06:26ورودتون رو به سایت تبریک میگم. اما این تاپیک مربوط به یک سال پیش می باشد. و کارش تموم شده. موفق باشید. نوید.
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 273]