/
  • حرکت اسب در شطرنج بدون تکرار

  • ارسال پاسخ   امتیاز موضوع:
    • 0 رأی - میانگین امیتازات: 0
    • 1
    • 2
    • 3
    • 4
    • 5

    حالت موضوعی | حالت خطی حرکت اسب در شطرنج بدون تکرار
    نویسنده پیام
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #1
    حرکت اسب در شطرنج بدون تکرار
    داداشم امروز گفت یه کد نویسم که یه اسب توی خونه های شطرنج حرکت کنه و بدون اینکه خونه تکراری رو بره کل خونه ها رو بره
    من این کد رو واسش نوشتم گذاشتم شما هم ببینید. البته این کد توی حلقه ده هزار تایی ۴۸ حرکت رو میده Big Grin
    از‌ اصطلاحاتی هم که استفاده کردم زیاد بهش گیر ندین Big Grin
    کد PHP:
    <?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); 
    (آخرین ویرایش در این ارسال: ۱۳۸۸ دي ۱۳ ۱۰:۵۱ عصر، توسط admin.)
    ۱۳۸۸ دي ۱۳ ۱۰:۵۰ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط : Padideh Maya HiddeN Alimokhlesi molana parvane zoghal amir.s aligilani1986
    Padideh آفلاین
    فرشاد
    ***

    ارسال‌ها: 146
    تاریخ عضویت: ۱۳۸۸ دي ۱۰
    اعتبار: 1
    تشکرها : 221
    ( 39 تشکر در 37 ارسال )
    ارسال: #2
    RE: حرکت اسب در شطرنج بدون تکرار
    اولین کاری که انجام دادی چی بود فلوچارت کشیدی ؟ الگوریتم رو به دست آوردی و بعد شروع به کد نویسی کردی ؟
    ۱۳۸۸ دي ۱۳ ۱۱:۰۲ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #3
    RE: حرکت اسب در شطرنج بدون تکرار
    (۱۳۸۸ دي ۱۳ ۱۱:۰۲ عصر)Padideh نوشته شده توسط:  اولین کاری که انجام دادی چی بود فلوچارت کشیدی ؟ الگوریتم رو به دست آوردی و بعد شروع به کد نویسی کردی ؟

    قانونا باید الگوریتمش رو بکشی بعد بنویسی
    اما من توی ذهنم الگوریتم رو ترسیم کردم و به تدریج پیش رفتم. البته این کار نیاز به تمرین زیاد داره
    ۱۳۸۸ دي ۱۳ ۱۱:۲۶ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    k2-4u آفلاین
    LAMP Programmer
    ***

    ارسال‌ها: 88
    تاریخ عضویت: ۱۳۸۸ مرداد ۲۱
    اعتبار: 4
    تشکرها : 64
    ( 218 تشکر در 56 ارسال )
    ارسال: #4
    RE: حرکت اسب در شطرنج بدون تکرار
    داشتم به این فکر می کردم که هوش مصنوعی از اون چیزی که آدم فکر می کنه
    خیلی سخت تر و فراتره Undecided Confused Huh
    ۱۳۸۸ دي ۱۷ ۰۱:۴۳ صبح
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    Padideh آفلاین
    فرشاد
    ***

    ارسال‌ها: 146
    تاریخ عضویت: ۱۳۸۸ دي ۱۰
    اعتبار: 1
    تشکرها : 221
    ( 39 تشکر در 37 ارسال )
    ارسال: #5
    RE: حرکت اسب در شطرنج بدون تکرار
    میتونی رو این تمرین بیشتر بحث بکنی و برای ترسیم الگوریتم باید به چه چیزهایی توجه کرد
    ۱۳۸۸ دي ۱۷ ۰۴:۰۹ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    zoghal آفلاین
    صالح سوزنچی
    *****

    ارسال‌ها: 1,766
    تاریخ عضویت: ۱۳۸۷ دي ۲۵
    اعتبار: 23
    تشکرها : 1500
    ( 1729 تشکر در 992 ارسال )
    ارسال: #6
    RE: حرکت اسب در شطرنج بدون تکرار
    حالم بد شد. یاد دانشگاه افتادمAngry
    ۱۳۸۸ دي ۱۷ ۰۷:۴۵ عصر
    یافتن ارسال‌ها WWW پاسخ با نقل قول
     تشکر شده توسط : parvane
    hidensoft آفلاین
    عضو ارشد
    *****

    ارسال‌ها: 1,384
    تاریخ عضویت: ۱۳۸۸ شهريور ۳
    اعتبار: 46
    تشکرها : 729
    ( 1394 تشکر در 782 ارسال )
    ارسال: #7
    RE: حرکت اسب در شطرنج بدون تکرار
    نقل قول: حالم بد شد. یاد دانشگاه افتادم
    منم همینطور اما حالم بد نشد Big Grin
    ۱۳۸۸ دي ۱۷ ۰۹:۳۳ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    admin آفلاین
    وحید سهرابلو
    **********

    ارسال‌ها: 5,697
    تاریخ عضویت: ۱۳۸۷ آذر ۲۴
    اعتبار: 100
    تشکرها : 1362
    ( 6197 تشکر در 3438 ارسال )
    ارسال: #8
    RE: حرکت اسب در شطرنج بدون تکرار
    والا راستش همین که نوشتم خیلی شاهکار کردم Big Grin ولی سوالی در مورد قسمتیش داری می تونی بپرسی. بهتره یه بررسی کنی.
    اما هوش مصنوعی چیزی که هنوز خیلی خیلی خیلی خیلی مونده تا تازه زنده بشه. واقعا بحثهاش سخته (البته نه بحثهای دانشگاه که در پیتن)

    توی دانشگاتون از این سواالا میدادن؟ شما هم حل می کردین؟ شما دانشجو نبودین Big Grin . سر درس php هم تمرین حل نمی کردم Big Grin
    ۱۳۸۸ دي ۱۹ ۰۶:۳۰ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    parvane آفلاین
    عضو مهم
    ****

    ارسال‌ها: 352
    تاریخ عضویت: ۱۳۸۷ دي ۸
    اعتبار: 12
    تشکرها : 590
    ( 424 تشکر در 242 ارسال )
    ارسال: #9
    RE: حرکت اسب در شطرنج بدون تکرار
    طراحی الگوریتم Angel
    ۱۳۸۸ دي ۱۹ ۰۶:۵۷ عصر
    یافتن ارسال‌ها پاسخ با نقل قول
     تشکر شده توسط :
    « قدیمی تر | تازه‌ تر »

    ارسال پاسخ
    پرش به انجمن:


    کاربرانِ درحال بازدید از این موضوع: 1 مهمان
    IranPHP.org | تماس با ما | بازگشت به بالا | بازگشت به محتوا | بایگانی | پیوند سایتی RSS