ايران ويج

نسخه‌ی کامل: دوستان کمک کنید لطفا الگوریتم سودوکو می خوام
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام دوستان
من الگوریتم جدول سودوکو رو می خوام تو رو خدا کمکم کنید
تو انجمن برنامه نویس مطرح کردم کسی نبود جواب بده اینه که اومدم اینجا چون مطمئنم جوابمو می گیرم اینجا لطفا کمکم کنید
قبلاً تو فروم در موردش صحبت شده، 1 سرچ بزن پیدا می کنی!!!
اون پست برای من بود که کسی هم جواب نداد.
اگه فقط می خوای سودوکو حل کنی برنامه شو من پیدا کردم.
ولی اگه میخوای خودت برنامه شو بنویسی اولین توصیم اینه که از خیرش بگذری.
ولی اگه نمیخوای از خیرش بگذری بگو. شاید بتونم کمکت کنم آخه یه وقتایی دنبالش بودم.

در ضمن
new_boys333 نوشته است:چون مطمئنم جوابمو می گیرم اینجا لطفا کمکم کنید
به این میگن چی؟ تو محله ما میگن هندونه.
دوست عزیز هندونه نبود . من تو فروم های مختلفی رفتم اما اینجا معلومه افرادش هم با سوادن هم با مرام
این سایت ایران ویچ به نظرم سایت خیلی خوبیه که همه اطلاعاتشون رو در اختیار هم قرار می دن بی اغراق می گم
منظورتون از دو حالت چی بود؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
========================================================
این الگوریتم حل جدول سودوکو پروژه درسی هست و پاش نمره خوابیده نمی دونم چه خاکی تو سرم کنم
دوست عزیز هندونه نبود . من تو فروم های مختلفی رفتم اما اینجا معلومه افرادش هم با سوادن هم با مرام
این سایت ایران ویچ به نظرم سایت خیلی خوبیه که همه اطلاعاتشون رو در اختیار هم قرار می دن بی اغراق می گم
منظورتون از دو حالت چی بود؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
========================================================
این الگوریتم حل جدول سودوکو پروژه درسی هست و پاش نمره خوابیده نمی دونم چه خاکی تو سرم کنم
خب اگه خودت اينو انتخاب كردي كه بگم اشتباه بزگي كردي. و اون دو حالت هم امضامه زياد روش فكر نكن.
چيزايي كه الان مينويسم بدرد اين سودوكو هاي توي روزنامه ها ميخوره كه چند تا از عددا رو مشخص كردند.
خب سودو كو رو كه مشناسي يه جدول 9 *9 است كه هر خونش 9 حالت داره.
اولين راه اينه كه تمام حالات رو با چند تا حلقه حل كني در اين صورت 1.96e+77 حالت وجود داره. اين روش اگر اعداد داده شده كم باشه اصلا به صرفه نيست.
ولي روش ديگه اي كه به ذهن من رسيده اينه كه مثل يه نفر كه سودوكو رو حل ميكنه اونو حل كني. شما اول بايد تمام فوت و فن هاي حل اين جداول رو ياد بگيري يا يه نفرو پيدا كني كه بلد باشه.(كه من اون يه نفره رو دارم). بعد بايد اونا رو توسط كامپيوتر پياده سازي كني.
بازم اگه توضيحات بيشتر ميخواي در خدمتيم.
نه عزیز جان من انتخاب نکردم خود استاد گرام داده
به هر حال ممنون
الگوریتم سادش اینه
1 خونه رو انتخاب می کنی و چک می کنی که چه اعدادی می تونه توش قرار بگیره:
فرض کن اولین خونه تو ردیف اول رو انتخاب کردی و می خواد جاش 1 بذاری، 3 چیز رو تست می کنی، توی ردیف افقی شماره 1 وجود نداشته باشه، توی ستون عمودی 1 وجود نداشته باشه، توی مربع 3*3، 1 وجود نداشته باشه.
حالا اگه یکی از این 3 شرط نقض شد(مثلاً تو ستون عمودی، 1 بود) می ری سراغ جاگذاری عدد 2 توی همون خونه.
نکته مهم اینه که اگه هر 3 شرط برقرار بود دلیل بر این نیست که اون خونه حتماً 1 هستش چون این شرط لازمه ولی شرط کافی نیست.
پس برنامه ات باید 2 تا loop تو در تو داشته باشه که loop بیرونی برای حرکت روی خونه های جدوله و loop داخلی برای تست کردن اعداد توی هر خونه از جدوله.
وقتی این کار ها رو می کنی اصطلاحاً احتمال اعداد داخل هر خونه رو بدست آوردی، حالا بقیشو خودت حل کن، دیگه کاری نداره.

البته 1 نکته رو بگم: این 3 شرطی که گفتم خیلی ساده بود، در واقعیت 6 شرط رو چک می شه(شاید هم 5 تا)،
مثلاً یکی از شرط هایی که نگفتم اینه: اگه تو ردیف افقی اول یک نبود، مطمیناً یکی از 9 خونش باید 1 باشه، اگه در ردیف دوم و سوم عدد 1 وجود داشت، یکی از مربع های 3*3 که توش 1 نیست توش باید 1 باشه و ردیف اولش هم 1 هستش!!! در حقیقت فقط 3 تا خونه می تونه احتمال داشتن 1 رو داشته باشن و خیلی از موقع ها هم هست که 2 تا از این 3 خونه قبلاً پر شده پس حتماً خونه باقی مونده 1 هستش!!!!
نبش قبر می کنی؟
این برنامه برای حل مسائل ساده طراحی شده و در مواردی که از سطرها و ستون ها و مربع های 3 در 3 نمی شه «یک نتیجه ی قطعی» گرفت دیگه جواب نمیده.
قسمت Generate هم بعضی مواقع درست کار میکنه نه همیشه.
نقل قول: باید يه نفرو پيدا كني كه بلد باشه.(كه من اون يه نفره رو دارم).
باهات موافقم. من هم موقع نوشتن این برنامه مخم تعطیل بود و دوستم راه حل ها رو ارائه می داد.
بعد از امتحانات روش بیشتر کار می کنم که وقتی بجای یک حالت قطعی چندین حالت وجود داره بیاد و یکی یکی اون حالت ها رو تست کنه (یه الگوریتم سرعت پایین Tongue )
طرز استفاده:
بازی رو SuDoKu اجرا می کنید و NewGame می زنید. اعداد بازی رو تو برنامه من وارد می کنید و بعد یا دکمه Auto رو می زنید که خودش بازی رو حل کنه یا یکی یکی اون دکمه هایی رو می زنید که Caption فارسی دارند تا ذره ذره حل بشه.
نظری؟ سؤالی؟ انتقادی؟
ویرایش شد:
به عنوان مثال برای جاهایی که چند انتخاب وجود دارد (انتخاب قطعی وجود ندارد)
فایل 2_496 با پسوند sdk را Load کنید.
[تصویر:  SuDoKuSample.bmp]
در تصویر می بینید که در «موقعیت سطر 2 ستون 1» اعداد 1 و 2 می توانند قرار بگیرند. کافیست برنامه با عدد 1 به بن بست برسد تا نوبت امتحان کردن عدد 2 شود.
به محض قرار دادن عدد 2 در «موقعیت سطر 2 ستون 1»، الگوریتمِ دکمه Auto کل پازل را حل خواهد کرد.
پس بعد از Load کردن فایل 2_496 عدد 2 را دستی وارد کنید و دکمه Auto را بزنید.
این خوبه :
http://www.programmersheaven.com/zone3/c.../index.htm
سه تا سورس واسه سودوکو توش هست
(تو یکیشون هم الگوریتمشو قشنگ توضیح داده)
اینم واسه VB
http://www.programmersheaven.com/zone1/c.../index.htm

اصلا برو تو این سایت :www.programmersheaven.com بعد زبان مورد نظرتو انتخاب کن بعد قسمت سورس بعد Games احتمال زیاد واسه سودوکو هست

توصیه میکنم خودت بنویسی
اصلا سخت نیست
صفحه‌ها: 1 2