نمایش نتایج 1 تا 8 از 8

نام تاپیک: حرکت اسب بروی صفحه شطرنج

  1. #1

    حرکت اسب بروی صفحه شطرنج

    شبه کدی بنویسید که حرکت اسب بر روی صفحه شطرنج را به گونه ای تنظیم کند که اسب دوبار در یک خانه نرود به عبارتی در هر خانه فقط یک بار اسب وارد شود و اگر در خانه دو بار وارد شد یک قدم به حرکت قبلی برگردد.

  2. #2
    می تونم خیلی ساده این کد رو برات بنویسم.همچنین اون کد جارو برقی هم کاری نداره. اما پیشنهاد می کنم رو مسائل دانشگاهت خودت کار کنی و اگه واقعا گیر کردی، مشکلت رو اینجا مطرح کنی.

    ممکنه جوابت این باشه که قبلا تلاشت رو کردی و نشده. در این صورت راه حل منطقی اینه که کارهایی رو که کردی، اینجا بذاری تا روشون بحث کنیم.

    موفق باشی

  3. #3
    در مورد الگوریتم اسب فکر کردم،مثلا برای یه خونه باید حالتهایش را در نظر گرفت بعد از اون حالتهایی را از این خونه بررسی کرد که کمترین حالت ممکن باشه.اگه بخوای در حالت عادی بررسی کنی،یه خونه خالی میمونه.و در ضمن یکی از دوستام میگفت برای خونه (6و2) جواب نمیده.

  4. #4
    من که از صحبتات چیزی نفهمیدم. بذار من یه شبه الگوریتم ارائه بدم، بعد تلاش کن همین شبه الگوریتم من رو بسط بدی (یعنی جزئیات بیشتری در نظر بگیری و سعی کنی به کد واقعی نزدیکترش کنی). لازم نیست این عملیات بسط دادن رو تو یه مرحله انجام بدی.

    اما شبه کد بنده:

    تابع بررسی (یه خونه شطرنج هم پارامتر هم داره)1- اگه همه صفحه شطرنج طی شده کار تمومه وگرنه:
    2- ببین اسب از این خونه پارامتر کجاها میتونه بره. به ازای هر کدوم از خونه هایی که اسبمون میتونه بره:
    2-1- تابع بررسی رو واسه اون خونه صدا کن.

    اصل برنامه:
    1- به ازای هرکدوم از خونه های صفحه شطرنج:
    1-1- تابع بررسی رو با پارامتر بودن اون خونه حساب کن.

  5. #5
    این پروژه ترم قبل بچه های کلاسه.
    الگوریتم اون را میتونی از کتاب "ساختمان داده ها در ‍‍++‍c "نوشته هورویتس ترجمه آقای قلزم بیابی.
    این کتاب را از 82 یی های کلاس میتونی بگیری.

  6. #6
    نقل قول نوشته شده توسط na30m
    در مورد الگوریتم اسب فکر کردم،مثلا برای یه خونه باید حالتهایش را در نظر گرفت بعد از اون حالتهایی را از این خونه بررسی کرد که کمترین حالت ممکن باشه.اگه بخوای در حالت عادی بررسی کنی،یه خونه خالی میمونه.و در ضمن یکی از دوستام میگفت برای خونه (6و2) جواب نمیده.
    سلام
    این الگوریتم برای همه خانه ها جواب می دهد مشکل خاصی ندارد .
    راحت تر این است که با استفاده از تابع بازگشتی بروی .
    حتما باید بررسی کرد در این خانه ای که هست از این خانه فرضا چند حرکت می تواند داشته باشد اون حرکتی انتخاب می شود که کمترین حرکت ممکن را در مرحله ی بعدی داشته باشد .
    مثلا اسب در 3 حرکت می تواند داشته باشد (در این خانه ای که هست ) حرکت اول را اگر بکند در حرکت بعدی 4 حرکت می تواند انجام دهد حرکت دوم را اگر بکند 3 حرکت در حرکت بعدی می تواند داشته باشد وحرکت سوم را اگر بکند در حرکت بعدی 1 حرکت خواهد داشد پس حرکت سوم را انتخاب باید کند که در حرکت بعدی کمترین حرکت را دارد.

  7. #7

  8. #8

    راهنمایی درمورد این الگوریتم

    سه آرایه زیر رادرنظر بگیرید :

    int access[ SIZE ][ SIZE ] = { 2, 3, 4, 4, 4, 4, 3, 2,
    3, 4, 6, 6, 6, 6, 4, 3,
    4, 6, 8, 8, 8, 8, 6, 4,
    4, 6, 8, 8, 8, 8, 6, 4,
    4, 6, 8, 8, 8, 8, 6, 4,
    4, 6, 8, 8, 8, 8, 6, 4,
    3, 4, 6, 6, 6, 6, 4, 3,
    2, 3, 4, 4, 4, 4, 3, 2 };
    int horizontal[ SIZE ] = { 2, 1, -1, -2, -2, -1, 1, 2 };
    int vertical[ SIZE ] = { -1, -2, -2, -1, 1, 2, 2, 1 };




    آرایه اول نشون میده که اگه اسب در یه خانه باشه ، به چند خانه بعد می تونه بره
    مثلا اگه در خانه ای باشه که عدد 4 در آن خانه است ، عدد 4 نشان می دهد که اسب از خانه فعلی به 4 خانه دیگر می تواند برود

    آرایه دوم و سوم در واقع حرکت اسب رو پیاده سازی می کنند .
    به این صورت که اگه مثلا خانه اول از دو آرایه Horizontal و Vertical رو انتخاب کنیم ( بالاجبار باید عناصر های متناظر از این دو آرایه انتخاب شود مثلا اگر عنصر اول از آرایه دوم انتخاب شود باید عنصر اول نیز از آرایه سوم انتخاب شود ) به این معنی است که اسب 2 خانه به جلو و یک خانه به بالا باید برود ، که دقیقا یکی از 6 حرکت اسب است .


    یک خانه برای شروع حرکت در نظر میگیریم ؛ در یک آرایه دیگر ( 8*8) این خانه را به عنوان اولین خانه ای که اسب از آنجا قرار است حرکت خود را آغاز کند ، ثبت می کنیم . سپس در آرایه Access از 6 خانه اطراف محل شروع حرکت 1 واحد کم میکنیم ، به این معنی که اگر اسب در یکی از این 6 خانه قرار گیرد ، یکی از خانه های موجود برای حرکت بعدی خود را از دست داده است ، چرا که یک بار از آنجا عبور کرده .



    با این راهنمایی و کمی تامل در این مساله حتما خودتون می تونید جزویات حل و در نهایت کد این برنامه رو به زبان مد نظر خودتون بنویسید .







    .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •