نمايش پست تنها
قديمي ۱۰-۱۲-۱۳۸۸, ۰۶:۱۲ بعد از ظهر   #7 (لینک دائم)
mardin200 Male
Administrator
 
آواتار mardin200
 
تاريخ عضويت: آذر ۱۳۸۸
محل سكونت: تهران
پست ها: 309
تشكرها: 120
1,748 تشكر در 263 پست
My Mood: Mehrabon
Wink

سلام قبل هر چیز ببخش که یکم دیر شد.
ما در ابتدا باید یک تابع اکتشافی خوب برای مسئله پیدا کنیم.
مقدار تابع برابر است با مجموع فاصله های افقی و عمودی هر عدد با مکان اصلی آن که همان هدف است.
مثلا در مثالی که خودتون انتخاب کردید همان حالت آغازین را در نظر بگیرید، فاصله عدد 8 با مکان اصلی خودش 3 است.ی2 حرکت افقی و یکی عمودی و اگر برای تک تک اعداد آن این مقادیر را بدست آوریم حاصل تابع برای این حالت برابر است با:
1+1+3+3+2+0+1+1+2=14
این مقدار، مقدار تابع h است. مقدار تابع g را هم به این صورت می توان بدست آورد ولی برای محاسبه آن باید فاصله هر حالت با حالت آغازی بدست آوریم و برای هر حالت f=g+h را بدست می آوریم برای هر نود که کمتر بود آن را بست می دهیم.
مثلا برای حالت اول که بست دادی :
f(1)=2+12=14 f(2)=2+16=18 f(3)=2+14=16 f(4)=2+14=16
پس حالا بهتر است ابتدا نود شماره 1 را بسط دهیم 3 یا 4 را هم ذخیره داشته باشیم شاید بعدا از طریق آنها به جواب بهتر برسیم
پیاده سازیش را هم با# C در سایت قرار دادم
بازم اگه سوالی بود ما هستیم.
با آرزوی موفقیت
mardin200 آفلاين است   پاسخ با نقل قول
از mardin200 تشكر كرده اند:
Astaraki (۱۰-۱۲-۱۳۸۸), Di4mond_65 (۱۰-۱۲-۱۳۸۸), tarfand (۰۸-۱۷-۱۳۹۱)