نمايش پست تنها
قديمي ۰۸-۲۹-۱۳۹۰, ۰۱:۳۹ بعد از ظهر   #13 (لینک دائم)
maaheno Male
عضو فعال
 
آواتار maaheno
 
تاريخ عضويت: مهر ۱۳۸۹
محل سكونت: كرج
پست ها: 11
تشكرها: 134
30 تشكر در 5 پست
پيش فرض

اگر سوال اولت جدی بود باید بگم که نه قرار نیست توی آواتار عکس خودم باشه دوما یعنی شما امام موسی صدر رو نمیشناسین؟!!

در مورد سوال فنی؛ به نظر میاد باید یه بار دیگه خود الگوریتم *A رو بررسی کنید. توی این الگوریتم روش کار به این صورت هست (البته توی مسئله خودمون): برای هر گره مقدار تابع هیورستیک رو محاسبه می کنه ضمنا هر گره دارای یک مقدار هست که هزینه رسیدن به این گره رو از ابتدای حرکت مشخص می کنه.
تابع نهایی مورد استفاده از جمع این دو تا حاصل میشه و براساس مقدار این تابع توی یک صف اولویت قرار می گیره هر گره ای که مقدار کمتری داشته باشه در ابتدای صف قرار میگیره .

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

برای یافتن مسیر، هر گره یک آرایه داره که نشون می ده از ابتدای مسیر چطور به این گره رسیدیم. و توی این آرایه مثلا از عبارات UP_Down_Right_Left که اشاره کردید استفاده میشه.
پس بعد از اینکه به جواب رسیدیم می تونیم محتوای این آرایه رو از ابتدا روی حالت اولیه اجرا کنیم تا به جواب برسیم.
امیدوارم متوجه شده باشی
maaheno آفلاين است   پاسخ با نقل قول
از maaheno تشكر كرده است:
jojepanbeyi (۰۹-۱۵-۱۳۹۰)