با سلام
من یک برنامه ایی را میخواهم بنویسم که با استفاده از روش عقبگرد یک اسب را در تمام خانه های شطرنج حرکت بدهد.
اگر بتونید کمک کنید خیلی ممنون میشم.:wac:
Printable View
با سلام
من یک برنامه ایی را میخواهم بنویسم که با استفاده از روش عقبگرد یک اسب را در تمام خانه های شطرنج حرکت بدهد.
اگر بتونید کمک کنید خیلی ممنون میشم.:wac:
من این الگوریتم را به صورت شبه کد برایتان قرار می دهم. تبدیل کردنش به زبان c کاری ندارد و ساده است ولی اگر مشکلی داشتید در خدمتم. شاید هم دیگه دیر شده در جواب دادن ولی به هر حال من این را گذاشتم.
فقط توجه شود که در برنامه اصلی دو دستور زیر باید نوشته شود:
1- مقدار داخل تمامی خانه های ماتریس H برابر صفر گردد
2- تابع Horse با مقدار ابتدایی( Horse(x,y,1 صدا زده شود که در آن x,y خانه ای از صفحه شطرنج است که حرکت از آنجا قرار است آغاز شود.
نکته: نقطه (0و0) در ماتریس بالاترین و چپ ترین خانه در صفحه شطرنج است با توجه به این نکته x,y را در دستور شماره 2 مقداردهی کنید.
اگر اسب را در یکی از خانه های وسطی صفحه در نظر بگیرید هشت حرکت برای آن امکان پذیر است به همین دلیل در else داخل تابع horse هشت بار horse را صدا زده است.
کد:Horse(x,y,count){
If promising(x,y){
H[x][y]=count //یعنی شماره حرکت (مثلا دومین حرکت) را در خانه مورد نظر قرار بده
If count==n^2
Write H[1][1].........H[n][n] // اعداد درون ماتریس را چاپ کن
Else{
Horse(x-1,y-2,count+1); // تابع اصلی را برای هر هشت حرکت اسب صدا میزند
Horse(x-1,y+2,count+1);
Horse(x-2,y-1,count+1);
Horse(x-2,y+1,count+1);
Horse(x+1,y-2,count+1);
Horse(x+1,y+2,count+1);
Horse(x+2,y-1,count+1);
Horse(x+2,y+1,count+1);
} // end of Else
H[x][y]=0; //مقدار این خانه ماتریس را برابر صفر قرار بده
} // refer to "promising"
} // end of Horse function
Boolean promising(x,y){
If (x<1) or (x>n) or (y<1) or (y>n) // یعنی اگر در حرکت انجام شده اسب بیرون از صفحه شطرنج قرار گرفته
Return false;
If H[x][y] != 0 // یعنی اگر خانه تکراری بود
Return false;
Return true;
}
سلام الگوریتم به دردتون خورد اصلا؟
خیلی ممنون چه خوب جواب یک تازه وارد را می دهید. باشه تقصیر منه اگه الگوریتم را گذاشتم شاید کار اشتباهی کردم. کارم اشتباه بوده؟
سلام.نقل قول:
خیلی ممنون چه خوب جواب یک تازه وارد را می دهید. باشه تقصیر منه اگه الگوریتم را گذاشتم شاید کار اشتباهی کردم. کارم اشتباه بوده؟
دوست عزیز چرا ناراحت شدید؟
مهم این هست که شما کمکتون رو کردید. من به جای ایشون از شما تشکر میکنم.
به خاطر وقتی که گذاشتید و جواب این سوال رو دادید.
موفق باشید.
خیلی ممنون someone جان قابلی نداشتنقل قول: