PDA

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



na30m
پنج شنبه 27 اسفند 1383, 21:27 عصر
شبه کدی بنویسید که حرکت اسب بر روی صفحه شطرنج را به گونه ای تنظیم کند که اسب دوبار در یک خانه نرود به عبارتی در هر خانه فقط یک بار اسب وارد شود و اگر در خانه دو بار وارد شد یک قدم به حرکت قبلی برگردد.

Sepidar
پنج شنبه 27 اسفند 1383, 22:41 عصر
می تونم خیلی ساده این کد رو برات بنویسم.همچنین اون کد جارو برقی هم کاری نداره. اما پیشنهاد می کنم رو مسائل دانشگاهت خودت کار کنی و اگه واقعا گیر کردی، مشکلت رو اینجا مطرح کنی.

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

موفق باشی

na30m
جمعه 28 اسفند 1383, 21:45 عصر
در مورد الگوریتم اسب فکر کردم،مثلا برای یه خونه باید حالتهایش را در نظر گرفت بعد از اون حالتهایی را از این خونه بررسی کرد که کمترین حالت ممکن باشه.اگه بخوای در حالت عادی بررسی کنی،یه خونه خالی میمونه.و در ضمن یکی از دوستام میگفت برای خونه (6و2) جواب نمیده.

Sepidar
جمعه 28 اسفند 1383, 22:52 عصر
من که از صحبتات چیزی نفهمیدم. بذار من یه شبه الگوریتم ارائه بدم، بعد تلاش کن همین شبه الگوریتم من رو بسط بدی (یعنی جزئیات بیشتری در نظر بگیری و سعی کنی به کد واقعی نزدیکترش کنی). لازم نیست این عملیات بسط دادن رو تو یه مرحله انجام بدی.

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

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

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

cs-82
پنج شنبه 04 فروردین 1384, 21:02 عصر
این پروژه ترم قبل بچه های کلاسه.
الگوریتم اون را میتونی از کتاب "ساختمان داده ها در ‍‍++‍c "نوشته هورویتس ترجمه آقای قلزم بیابی.
این کتاب را از 82 یی های کلاس میتونی بگیری.

gm.sara
جمعه 14 مرداد 1384, 13:46 عصر
در مورد الگوریتم اسب فکر کردم،مثلا برای یه خونه باید حالتهایش را در نظر گرفت بعد از اون حالتهایی را از این خونه بررسی کرد که کمترین حالت ممکن باشه.اگه بخوای در حالت عادی بررسی کنی،یه خونه خالی میمونه.و در ضمن یکی از دوستام میگفت برای خونه (6و2) جواب نمیده.

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

Amir Oveisi
جمعه 13 بهمن 1385, 18:29 عصر
چرا دوستانی که برنامه رو دارن نمیذارن اینجا تا هر کی خواست برداره؟؟؟؟

با C# 2005 نوشته شده
به درد میخوره ان شاالله

hamed jalili
یک شنبه 04 شهریور 1386, 14:18 عصر
سه آرایه زیر رادرنظر بگیرید :


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 خانه قرار گیرد ، یکی از خانه های موجود برای حرکت بعدی خود را از دست داده است ، چرا که یک بار از آنجا عبور کرده .



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







.