فروش فایل

فروش فایل ,دانلود فایل,خرید فایل,دانلود رایگان فایل,دانلود رایگان

فروش فایل

فروش فایل ,دانلود فایل,خرید فایل,دانلود رایگان فایل,دانلود رایگان

الگوریتم و سورس کد مسئله هشت وزیر ( 8 وزیر )


» :: الگوریتم و سورس رنج مسئله هشت وزیر ( 8 دستور )

این فایل صفت میباشد و می استطاعت با نام و مشخصات خودتون اونو ارائه بدید

مساله هشت وزیر از جمله مسائل پرمخاطب گفتگوها طراحی الگوریتم است. ۸  مهره وزیر رو روی صفحه شترنگ چنان بچینید که نتونن همدیگه رو تهدید کنن.

از بهر افرادی که با لعب شطرنج آشنایی ندارن:

دستور مهره ایا از مهره های بازی شطرنجه که می تونه در تمامی 8 جهت هر اندازه خانه – تا زمانی که مهره ای اسم نباشه – حرکت کنه و اگه در یکی از این سرا ها مهره حریف قرار داشته باشه تهدیدش کنه.

مساله هشت وزیر :  ما مساله رو باب حال کلی در نظر می گیریم. یعنی زمانی که ابعاد صفحه شترنگ n در n و تعداد نگین ها n هستش. ( n > 3 ) روشهای مختلفی برای پیدا اجرا کردن جواب وجود داره. یکی از این روشها چیدن s مهره ها روی برگ شطرنجه! به عبارت دیگه n مهره رو به چهره تصادفی باب خانه های جوراجور برگ قرار می دیم و بررسی می کنیم که آیا شرط مساله رو برآورده می کنن الا نه؟ این روش بسیار سریع ما رو به جواب باده رسونه. اما ایرادی که داره نمی شه آرام حیات بشه به همه حالتهای چینش دست پیدا کرد. در صفحه 8 باب 8 شطرنج این مساله 92 پاسخ مختلف داره. شما ممکنه روش تصادفی رو هزار بار به کار ببرید، اما نتونید همه 92 حالت ممکنه چهره به سمت دست بیارید. این آیین زمانی مفیده که پیدا کردن یه پاسخ برای ضمیر اول شخص جمع کافی باشه.

باب این سنخ روشها مهره ها رو یکی یکی و به صورت بازگشتی روی صفحه طوری باده چینیم که آرام باشیم با مهره های قبلی تداخل نداره و شرط مساله برآورده باده شه. معمولا از خط آغاز صفحه شروع می کنیم به قرار دادن مهره ها. آکنده واضحه که هر خط فقط می تونه یه نگین رو تو خودش جا بده. مهره سطر دوم رو طوری قرار باده دیم که توسط نگین سطر اول تهدید نشه. برای این پیشه خانه های مختلفی از سطر رو می شه تعیین کرد. برای آراستگی داشتن کارهامون ضروری می کنیم همیشه تعیین سرا ها از سمت چپ سطر شروع می شه. به بند دیگه حرف شروع از سمت چپ سطر آغازین خانه ای که پیمان رو برآورده کنه انتخاب می کنیم. به همین ترتیب سطرهای بعدی رو بازهم باده چینیم. اگر به سطری رسیدیم که بر اصل چیدمان سطرهای قبلی ابداً خانه امنی برای مهره بود نداشت ( یعنی همه خانه ها توسط نگین های آخری تهدید می شدن ) یه مرحله به عقب بر می گردیم و مهره سطر قبل رو جابجا می کنیم. این کار هم با حرکت مهره به آغازین خانه سمت چپ موقعیت فعلی که شرط رو متحقق کنه، انجام می شه. حرف ادامه دادن این روال و با جابجا کردن نگین ها به صورت منظم و بازگشتی تمامی حالتهای ممکنه به ید می یان.

برای پیاده سازی قید این‌سان الگوریتمی و امتیاز اینکه چه خانه هایی از سطر امن هستن روشهای مختلفی وجود داره. ساده ترینشون اینه که تمام بار تمامی خانه هایی چهره که توانایی تهدید شدن از اونها وجود داره بررسی کنیم تا از قرار نداشتن مهره دستور در اونها آرام باشیم. اما این روش اصلا کارا و بهینه نیست.

روش دیگه تشریح کردن برگ شطرنج به صورت یه آرایه n در n هستش که خونه های امان و غیر امن با علامتگذاری آشکار می شن. هر بار که مهره ایا رو صفحه قرار باده گیره قید خونه هایی که توسط این مهره تهدید می شن به صورت غیر امن علامتگذاری باده شن. به این انتظام می شه فهمید که هر خونه با توجه به سمت چینش نگین های آخری امن هست یا نه؟ اما این روش هم معایبی داره که انگیزه باده شه به آیین سوم رجوع کنیم. برای آشنایی با این معایب کافیه سعی کنید کد برنامه رو بنویسید!

در روش سوم که من ازش استفاده کردم، از بهر علامتگذاری سرا های امن و غیر امن از شیوه دیگه ای بهره باده بریم. به سمت این ترتیب که اقطار راست به چپ، چپ به سمت راست و ستونها با شماره هایی آشکار می شن که کار علامتگذاری رو بسیار ساده می کنن. این روش بدون تردید از کاراترین روشهای رسیدن به جواب مساله ماست. هم سرعت اجرای زبرین داره و بازهم حافظه مصرفی بسیار کم!

کدی که به لسان ++C درباره این مساله نوشته شده حرف استفاده از روش سوم تعداد جوابهای ممکن – و نه خود جوابها – برای مقدارها جوراجور n رو مشخص می کنه. به آغاز مثال اگر n چهره 8 وارد کنید خروجی برنامه 92 خواهد بود. توصیه می کنم برای nهای بزرگ پروگرام رو امتحان نکنید! ار n رو 16 وارد کنید بعد از عبور زمان اضافی عدد 14772512 روی صفحه نمایش چاپ می شه. یعنی در صفحه شطرنج 16 در 16 حدود ۱۵ میلیون حال مختلف برای چینش صحیح وجود داره!!