تالار گفتمان مانشت
مسئله هشت وزیر و تکنیک عقبگرد - نسخه‌ی قابل چاپ

مسئله هشت وزیر و تکنیک عقبگرد - zahra13.66 - 27 فروردین ۱۳۹۵ ۱۲:۴۱ ب.ظ

دوستان سلام...
یه مهندس ناب پیدا میشه این شکلی رو که گذاشتم سریع توضیح بده؟؟؟؟
ممنون میشم یه توضیح واضح و کامل باشه.... اجرتون با خدای بزرگ در ماه رجب عزیز

مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


RE: مسئله هشت وزیر و تکنیک عقبگرد - Jooybari - 27 فروردین ۱۳۹۵ ۰۳:۲۴ ب.ظ

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

در حالت ۱ (گره ۱) صفحه خالیه. (شماره سطر وزیر همون عمق گره درخته)
حالت ۲ وزیر اول زو در خونه ۱ (عدد روی یال نشون دهنده شمارو ستون برای اون وزیره) قرار میدیم. (یعنی وزیر سطر اول و ستون اول)
حالت ۳ وزیر در ستون ۲ قرار میگیره (یعنی سطر دوم و ستون دوم) که مجاز نیست. (حالت سطر دوم ستون اول رو هم در نظر نمیگیریم. چون وزیر سطر قبل در ستون ۱ قرار داشت.)
حالت ۴ وزیر در ستون ۳ قرار میگیره. (یعنی وزیر سطر دوم و ستون سوم)
حالت ۵ و ۶ هم دو حالت برای وزیرهای سطر سوم درنظر گرفت. ولی هردوشون وزیر دوم رو تحدید میکردن. پس نمیتونیم با در نظر گرفتن دو وزیر اول، در سطر سوم وزیر قرار بدیم. باید حالت بعدی وزیر قبل (وزیر سطر دوم) رو بررسی کنیم و به حالت قبل بریم.
در حالت ۷ وزیر رو در ستون چهارم سطر دوم قرار میدیم.
حالت ۸ برای وزیر سطر سوم مجازه ولی حالت ۹ برای وزیر سطر چهرم مجاز نیست. پس وزیر سطر قبل (سطر سوم) رو تغییر میدیم.
حالت ۱۰ حالت بعدی وزیر سطر سومه که مجاز نیست. حالت دیگه ای برای وزیر سطر سوم نداریم. پس وضعیت وزیر دوم رو تغییر میدیم. برای وزیر دوم هم حالتی نداریم. پس حالت وزیر اول رو تغییر میدیم.
در حالت ۱۱ وزیر اول رو در ستون ۲ قرار میدیم.
حالت های ۱۲ و ۱۳ مربوط به قرار دادن وزیر دوم دو ستون ۱ و ۳ بوده که مجاز نیست.
حالت ۱۴ مربوط به حالت قرار دادن وزیر دوم در ستون چهارمه.
حالت ۱۵ مربوط به حالت قرار دادن وزیر سطر سوم در ستون اوله.
حالت ۱۶ هم مربوط به قرار دادن وزیر سطر چهارم در ستون سومه. این حالت مجازه و جواب مساله خواهد بود.

RE: مسئله هشت وزیر و تکنیک عقبگرد - zahra13.66 - 27 فروردین ۱۳۹۵ ۰۶:۴۸ ب.ظ

ممنون از اینکه پاسخ دادین... واقعا مرسی...HeartHeart
من فقط یه سوال هم دارم چرا در حالت ۲ گفتین وزیر در سطر اول و ستون اوله؟؟؟ مگه نگفتین عمق هر گره شماره سطر رو نشون میده؟؟ اگه این طوری باشه عمق گره ۲ که ۲ هست؟؟
ممنون میشم منو از اشتباه خارج کنید....

RE: مسئله هشت وزیر و تکنیک عقبگرد - Jooybari - 27 فروردین ۱۳۹۵ ۰۷:۱۳ ب.ظ

(۲۷ فروردین ۱۳۹۵ ۰۶:۴۸ ب.ظ)zahra13.66 نوشته شده توسط:  ممنون از اینکه پاسخ دادین... واقعا مرسی...HeartHeart
من فقط یه سوال هم دارم چرا در حالت ۲ گفتین وزیر در سطر اول و ستون اوله؟؟؟ مگه نگفتین عمق هر گره شماره سطر رو نشون میده؟؟ اگه این طوری باشه عمق گره ۲ که ۲ هست؟؟
ممنون میشم منو از اشتباه خارج کنید....

عمقش یکه. عمق ریشه رو صفر در نظر بگیرید.

RE: مسئله هشت وزیر و تکنیک عقبگرد - zahra13.66 - 28 فروردین ۱۳۹۵ ۱۰:۳۱ ق.ظ

بازم ممنونم از پاسختون...
الگوریتم شو که عکسشو گذاشتم رو هم امکانش هست توضیح بدین؟؟؟ مخصوصا تابع promising را....
چون قبل این تابع گفته :
j=1 دو وزیر در یک ستون
i-j=k-l
i+j=k+l
اما در تابع promising دیگه اصلا از ال استفاده نکرده؟؟!!!!
ممنون میشم این پاسخ بدهید....
سپاسس فراوانHeartHeartHeart


مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.


RE: مسئله هشت وزیر و تکنیک عقبگرد - Jooybari - 28 فروردین ۱۳۹۵ ۱۲:۵۳ ب.ظ

(۲۸ فروردین ۱۳۹۵ ۱۰:۳۱ ق.ظ)zahra13.66 نوشته شده توسط:  بازم ممنونم از پاسختون...
الگوریتم شو که عکسشو گذاشتم رو هم امکانش هست توضیح بدین؟؟؟ مخصوصا تابع promising را....
چون قبل این تابع گفته :
j=1 دو وزیر در یک ستون
i-j=k-l
i+j=k+l
اما در تابع promising دیگه اصلا از ال استفاده نکرده؟؟!!!!
ممنون میشم این پاسخ بدهید....
سپاسس فراوانHeartHeartHeart


مهمان عزیز شما قادر به مشاهده پیوندهای انجمن مانشت نمی‌باشید. جهت مشاهده پیوندها ثبت نام کنید.

این کد مربوط به قرار دادن وزیر سطر kام در مساله n وزیر روی ماتریس x بوده. ماتریس x هم جزئی از ورودی های تابع نیست و متغیر global هست.
میگه اگه تو این سطر بتونیم وزیری قرار بدیم (تابع promising فقط چک میکنه که وزیر سطر kام وزیرهای سطرهای ۱ تا k-1 رو تهدید نکنه. اگه تهدید نکرد مقدار True و اگه تهدید کرد مقدار False میده.) در صورتی که k=n بود (در تمام سطرها وزیر قرار دادیم) جواب رو چاپ کن و در غیر این صورت الگوریتم رو برای سطر بعد اجرا کن (وزیر سطر بعدی رو پیدا کن).
این کد یه کد بازگشتیه که تمام جوابها رو برمیگردونه. اگه کد رو بصورت غیر بازگشتی مینوشت یه مقدار طولانی تر میشد ولی مفهوم عقبگرد تو اون بهتر بود.