• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
حرکت اسب در شطرنج بدون تکرار
#1
داداشم امروز گفت یه کد نویسم که یه اسب توی خونه های شطرنج حرکت کنه و بدون اینکه خونه تکراری رو بره کل خونه ها رو بره
من این کد رو واسش نوشتم گذاشتم شما هم ببینید. البته این کد توی حلقه ده هزار تایی ۴۸ حرکت رو میده Big Grin
از‌ اصطلاحاتی هم که استفاده کردم زیاد بهش گیر ندین Big Grin
کد پی‌اچ‌پی:
<?php
$Validkhaneha
= array();
//build default value
for($i=1;$i<=8;$i++){
    for(
$j=1;$j<=8;$j++){
        
$Validkhaneha[$i][$j]=true;
    }
}
function 
validSteps($x,$y,$road,$notValidRoad){
    global 
$Validkhaneha,$notValidRoad,$road;
    
$x1=$x+1;
    
$y1=$y+2;
    
    
$x2=$x+1;
    
$y2=$y-2;
    
    
$x3=$x-1;
    
$y3=$y+2;
    
    
$x4=$x-1;
    
$y4=$y-2;
    
    
$x5=$x+2;
    
$y5=$y+1;
    
    
$x6=$x+2;
    
$y6=$y-1;
    
    
$x7=$x-2;
    
$y7=$y+1;
    
    
$x8=$x-2;
    
$y8=$y-1;
    
    if(
isValidRoad($road,$notValidRoad,$x1,$y1)){
        return array(
$x1,$y1);
    }
    
    if(
isValidRoad($road,$notValidRoad,$x2,$y2)){
        return array(
$x2,$y2);
    }
    
    if(
isValidRoad($road,$notValidRoad,$x3,$y3)){
        return array(
$x3,$y3);
    }
    
    if(
isValidRoad($road,$notValidRoad,$x4,$y4)){
        return array(
$x4,$y4);
    }
    
    if(
isValidRoad($road,$notValidRoad,$x5,$y5)){
        return array(
$x5,$y5);
    }
    
    if(
isValidRoad($road,$notValidRoad,$x6,$y6)){
        return array(
$x6,$y6);
    }
    
    if(
isValidRoad($road,$notValidRoad,$x7,$y7)){
        return array(
$x7,$y7);
    }
    
    if(
isValidRoad($road,$notValidRoad,$x8,$y8)){
        return array(
$x8,$y8);
    }

    return 
false;
}

function 
isValidRoad($road,$notValidRoad,$x,$y){
    global 
$Validkhaneha;
    
$roadString=convertToString($road).$x.$y." ";
    
    if(
array_search($roadString,$notValidRoad)===false){
        
        if(
$x>and $y>and $x<=and $y<=8){
            if(
$Validkhaneha[$x][$y]){
                return 
true;
            }
        }
        
        
    }
    return 
false;
    
}
function 
convertToString($road){
    
$ret="";
    foreach(
$road as $r){
        
$ret.=$r[0].$r[1]." ";
    }
    return 
$ret;
}
$startx=1;
$starty=1;
$i=0;
$road=array();
$notValidRoad=array();
$b=10000;
while(
true){
    
$b--;
    if(
$b==0){
        break;
    }
        
$valids=validSteps($startx,$starty,$road,$notValidRoad);
        if(
is_array($valids)){
            
$road[]=$valids;
            
$Validkhaneha[$startx][$starty]=false;
            
$startx=$valids[0];
            
$starty=$valids[1];
        }
        else{
            
// not found - road must back
            
$notValidRoad[]=convertToString($road);
            
$Validkhaneha[$startx][$starty]=true;
            
$startx=$road[count($road)-2][0];
            
$starty=$road[count($road)-2][1];
            unset(
$road[count($road)-1]);
        }
    }

    
print_r($road); 
  پاسخ
#2
اولین کاری که انجام دادی چی بود فلوچارت کشیدی ؟ الگوریتم رو به دست آوردی و بعد شروع به کد نویسی کردی ؟
  پاسخ
تشکر شده توسط :
#3
(۱۳۸۸ دى ۱۴, ۱۲:۰۲ ق.ظ)Padideh نوشته: اولین کاری که انجام دادی چی بود فلوچارت کشیدی ؟ الگوریتم رو به دست آوردی و بعد شروع به کد نویسی کردی ؟

قانونا باید الگوریتمش رو بکشی بعد بنویسی
اما من توی ذهنم الگوریتم رو ترسیم کردم و به تدریج پیش رفتم. البته این کار نیاز به تمرین زیاد داره
  پاسخ
تشکر شده توسط :
#4
داشتم به این فکر می کردم که هوش مصنوعی از اون چیزی که آدم فکر می کنه
خیلی سخت تر و فراتره Undecided Confused Huh
  پاسخ
تشکر شده توسط :
#5
میتونی رو این تمرین بیشتر بحث بکنی و برای ترسیم الگوریتم باید به چه چیزهایی توجه کرد
  پاسخ
تشکر شده توسط :
#6
حالم بد شد. یاد دانشگاه افتادمAngry
  پاسخ
تشکر شده توسط : parvane
#7
نقل قول:حالم بد شد. یاد دانشگاه افتادم
منم همینطور اما حالم بد نشد Big Grin
  پاسخ
تشکر شده توسط :
#8
والا راستش همین که نوشتم خیلی شاهکار کردم Big Grin ولی سوالی در مورد قسمتیش داری می تونی بپرسی. بهتره یه بررسی کنی.
اما هوش مصنوعی چیزی که هنوز خیلی خیلی خیلی خیلی مونده تا تازه زنده بشه. واقعا بحثهاش سخته (البته نه بحثهای دانشگاه که در پیتن)

توی دانشگاتون از این سواالا میدادن؟ شما هم حل می کردین؟ شما دانشجو نبودین Big Grin . سر درس php هم تمرین حل نمی کردم Big Grin
  پاسخ
تشکر شده توسط :
#9
طراحی الگوریتم Angel
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان