ورود

View Full Version : الگوریتم زین اسب



rahimi4912
سه شنبه 02 اردیبهشت 1393, 12:03 عصر
سلام به همه ی برنامه نویسان عزیز

کد جاوایی رو میخواستم که بشه از طریق اون ، الگوریتم زین اسب رو را پیاده سازی کنه !

لطفا به من کمک کنید :قلب:

vahid-p
چهارشنبه 03 اردیبهشت 1393, 21:28 عصر
میشه در مورد الگوریتمش و کاری که قراره بکنه یه توضیحی بدید تا ببینم میتونم کدشو بزنم یا نه . راستش حوصلش نیست تو اینترنت سرچ بزنم :لبخند:

rahimi4912
یک شنبه 07 اردیبهشت 1393, 09:09 صبح
میشه در مورد الگوریتمش و کاری که قراره بکنه یه توضیحی بدید تا ببینم میتونم کدشو بزنم یا نه . راستش حوصلش نیست تو اینترنت سرچ بزنم :لبخند:
این الگوریتم یه صفحه ی شطرنج یعنی یه ارایه 8*8 که باید اندیس خانه ای که اسب داخلش قرار داره ، کاربر وارد کنه !
سپس با استفاده از الگوریتم زین اسب ، تعداد حرکات اسب که میتونه حرکت کنه رو برگردان !
حرکت اسب رو هم که در شطرنج بلدی ؟ ؟ :بوس:

vahid-p
یک شنبه 07 اردیبهشت 1393, 11:11 صبح
اگه منظورت رو گرفته باشم خب با چند تا if قابل پیاده سازیه. ولی اگه منظورته کل حرکاتی که از اون نقطه x,y به تمام صفحه ممکنه داشته باشه، هم خیلی راحت یه ماتریس 8*8 تعریف میکنی و تو هر کدوم از این if ها به صورت برگشتی به جای اینکه حرکتشون رو پرینت کنی، همون تابع رو فراخونی میکنی با همون ماتریس، که این ماتریس وظیفش اینه هر جا اسب تونست قرار بگیره، یه یک بذاره که دفعه بعد جای تکراری نره. اگه منظورت این بود بگو.

ولی اینکه اسبی که تو خونه x,y است چند تا حرکت از همون خونه با یک پرش میتونه داشته باشه :
public static int horseMovements(int x,int y){
int movement=0;
//2Right 1Up
if(x<7 && y<8) {
movement++;
System.out.println("("+(x+2)+","+(y+1)+")");
}
//2Right 1Down
if(x<7 && y>1){
movement++;
System.out.println("("+(x+2)+","+(y-1)+")");
}
//2Left 1Up
if(x>2 && y<8){
movement++;
System.out.println("("+(x-2)+","+(y+1)+")");
}
//2Left 1Down
if(x>2 && y>1){
movement++;
System.out.println("("+(x-2)+","+(y-1)+")");
}
//2Up 1Right
if(x<8 && y<7){
movement++;
System.out.println("("+(x+1)+","+(y+2)+")");
}
//2Up 1Left
if(x>1 && y<7){
movement++;
System.out.println("("+(x-1)+","+(y+2)+")");
}
//2Down 1Right
if(x<8 && y>2){
movement++;
System.out.println("("+(x+1)+","+(y-2)+")");
}
//2Down 1Left
if(x>1 && y>2){
movement++;
System.out.println("("+(x-1)+","+(y-2)+")");
}
return movement;
}

محمد فدوی
دوشنبه 08 اردیبهشت 1393, 21:40 عصر
از نظر من بهترین راه حفظ کردن کل صفحه ست! چون این کار چندان الگوریتم خاصی نمی طلبه!! :متفکر:


public class HorseMoves {
private static final int[][] MOVES = {
{2, 3, 4, 4},
{3, 4, 6, 6},
{4, 6, 8, 8},
{4, 6, 8, 8}
};

private HorseMoves() { }

public static int getMoves(int c, int r) {
if(c < 1 || c > 8 || r < 1 || r > 8) return 0;
if(c > 4) c = 9 - c;
if(r > 4) r = 9 - r;

return MOVES[r - 1][c - 1];
}
}


امیدوارم کمک کنه.