این فایل خام میباشد و می استطاعت حرف نام و مشخصات خودتون اونو ارائه بدید
مساله هشت وزیر از تمام مسائل پرمخاطب گفتگوها طراحی الگوریتم است. ۸ نگین وزیر رو روی صفحه شطرنج قید بچینید که نتونن همدیگه رو تهدید کنن.
از بهر افرادی که با لعب شطرنج آشنایی ندارن:
وزیر مهره ای از نگین های بازی شطرنجه که باده تونه در تمامی 8 جهت هر اندازه سرا – تا زمانی که مهره ای مانع نباشه – حرکت کنه و اگه در یکی از این خانه ها مهره دوست رسم داشته باشه تهدیدش کنه.
مساله هشت دستور : ما مساله رو باب حالت کلی در نظر می گیریم. یعنی زمانی که ابعاد صفحه شطرنج n باب n و اندازه مهره ها n هستش. ( n > 3 ) روشهای مختلفی از بهر پیدا اجرا کردن جواب وجود داره. یکی از این روشها چیدن تصادفی مهره ها روی صفحه شطرنجه! به سمت عبارت دیگه n مهره رو به سمت صورت تصادفی در خانه های مختلف صفحه رسم می دیم و بررسی می کنیم که آیا پیمان مساله رو برآورده می کنن الا نه؟ این روش انبوه سریع ما رو به سمت جواب می رسونه. اما ایرادی که داره نمی شه مطمئن بود بشه به سمت تمام حالتهای چینش دست پیدا کرد. در صفحه 8 در 8 شطرنج این مساله 92 جواب جوراجور داره. شما ممکنه روش تصادفی چهره هزار بار به کار ببرید، اما نتونید همه 92 حالت ممکنه رو به ید بیارید. این روش زمانی مفیده که آشکار اجرا کردن یه جواب برای ما کافی باشه.
باب این دسته روشها نگین ها رو یکی یکی و به صورت بازگشتی روی صفحه طوری می چینیم که مطمئن باشیم حرف نگین های قبلی تداخل نداره و شرط مساله برآورده باده شه. معمولا از سطر اول صفحه شروع باده کنیم به سمت قرار دادن مهره ها. پر واضحه که هر سطر فقط می تونه یه مهره رو تو خودش جا بده. مهره سطر دوم رو طوری قرار باده دیم که میانجیگری مهره سطر اول تهدید نشه. برای این کار خانه های مختلفی از سطر رو می شه انتخاب کرد. برای نظم داشتن کارهامون ضروری باده کنیم همیشه تعیین خانه ها از جانب چپ سطر شروع می شه. به عبارت دیگه با شروع از سمت چپ سطر اولین سرا ای که پیمان رو برآورده کنه انتخاب می کنیم. به همین انتظام سطرهای آتی رو هم می چینیم. اگر به سطری رسیدیم که حرف اساس چیدمان سطرهای قبلی هیچ سرا امنی برای مهره بود نداشت ( یعنی همه خانه ها توسط نگین های آخری تهدید می شدن ) یه مرحله به عقب بر می گردیم و مهره سطر قبل چهره جابجا می کنیم. این کار بازهم با حرکت نگین به اولین خانه سمت چپ موقعیت جاری که پیمان رو برآورده کنه، انجام می شه. با ادامه دادن این روال و حرف جابجا کردن نگین ها به سمت صورت منظم و بازگشتی تمامی حالتهای ممکنه به دست می یان.
برای پیاده سازی قید اینسان الگوریتمی و تشخیص اینکه چه خانه هایی از سطر امن هستن روشهای مختلفی وجود داره. ساده ترینشون اینه که تمام پاس تمامی خانه هایی رو که امکان ارعاب شدن از اونها بود داره بررسی کنیم تا از قرار نداشتن نگین وزیر در اونها آرام باشیم. اما این روش اصلا کارا و بهینه نیست.
روش دیگه تشریح اجرا کردن صفحه شطرنج به صورت یه آرایه n در n هستش که خونه های امن و غیر امان با علامتگذاری مشخص می شن. تمام بار که مهره ای چهره صفحه قرار می بست قید خونه هایی که توسط این مهره تهدید می شن به صورت غیر امن علامتگذاری می شن. به سمت این انتظام می شه فهمید که هر خونه با توجه به چینش مهره های قبلی امن هست الا نه؟ اما این آیین هم معایبی داره که باعث می شه به روش سوم بازآیی کنیم. برای آشنایی با این بدیها کافیه سعی کنید کد برنامه رو بنویسید!
در آیین سوم که من ازش استفاده کردم، از بهر علامتگذاری خانه های امن و غیر امن از عشوه دیگه ایا بهره می بریم. به این ترتیب که اقطار حق به چپ، چپ به راست و ستونها با تعداد هایی مشخص باده شن که کار علامتگذاری رو بسیار ساده باده کنن. این آیین بری شک از کاراترین روشهای رسیدن به جواب مساله ماست. هم سرعت اجرای بالایی داره و بازهم حافظه مصرفی بسیار کم!
کدی که به لسان ++C درباره این مساله اثر شده با استفاده از روش سوم اندازه جوابهای امکانپذیر – و نه خود جوابها – برای مقادیر مختلف n رو مشخص می کنه. به عنوان مثال اگر n رو 8 وارد کنید خروجی پروگرام 92 خواهد بود. توصیه باده کنم برای nهای ارجمند برنامه رو امتحان نکنید! اگر n رو 16 وارد کنید بعد از عبور دوران زیادی عدد 14772512 روی صفحه نمایش چاپ می شه. یعنی باب صفحه شطرنج 16 در 16 حدود ۱۵ میلیون حالت مختلف برای چیدمان حقیقی بود داره!!
++C (بخوانید سی پلاسپلاس) یک لسان برنامهنویسی رایانهای همهمنظوره، شیءگرا، سطح بالا و چندرگه (که از برنامهنویسی رویهای، تجرید دادهها و برنامهنویسی شیءگرا تایید میکند)، عمومی و با قابلیتهای سطح بالا و سطح پایین میباشد. این زبان دارای قابلیتهای انواع داده ایستا، نوشتار آزاد، چندمدلی، معمولاً زبان برگردان شده با پشتیبانی از برنامهنویسی ساختیافته، برنامهنویسی شیءگرا، برنامهنویسی جنریک است. از آنجا که در سی++ اشیاء را میتوان ابتدا به ساکن از کلاسهایی ایجاد کرد که به هیچگونه آل درجات ردهها و وراثت مقید نیستند، لذا سی++ از برنامهسازی شیء بنیاد (object-based programming) نیز پشتیبانی میکند.++C به همراه جد خود C از پرطرفدارترین زبانهای برنامهنویسی تجاری هستند.
++C یک لسان روی میانی در نظر گرفته میشود؛ این زبان دارای قابلیت زبانهای سطح بالا و پایین بهصورت همزمان است.
++C توسط بییارنه استراستروپ ریاضیدان دانمارکی در سال ۱۹۷۹ در آزمایشگاههای قید (Bell Labs)، برای بهبود لسان سی و حرف مبنای آن ساخته شد و آن را «C با کلاس» (C With Classes) نامگذاری نمود. باب سال ۱۹۸۳ به ++C تغییر نام داد. بسط با اضافه نمودن کلاسها و ویژگیهای دیگری مانند توابع مجازی، سربارگزاری عملگرها، وراثت چندگانه، شکل توابع، و پردازش استثناء انجام شد. این زبان برنامهنویسی باب سال ۱۹۹۸ تحت آوازه ISO/IEC ۱۴۸۸۲:۱۹۹۸ استاندارد شد. نسخهٔ جاری استاندارد این زبان ISO/IEC ۱۴۸۸۲:۲۰۱۴ است.