سلام دوست من
خیلی ممنون که سورس رو هم گذاشتی.(یه سوال:این عکسه آخونده خودتی؟)
خب برم سر اصل مطلب :
من الگوریتم رو متوجه شدم و مشکلی ندارم فقط یه قسمتش برام هنوز مبهمه و نفهمیدم-->
وقتی یه گره بررسی میشه و هدف نیست و از صف خارج میشه خب اگه بعدا گره هدف از فرزندای همین گره بود ما چطوری میتونیم مسیر راه حل رو پیدا کنیم با توجه به اینکه گره پدرش حذف شده؟
به عبارت دیگه بعد از رسیدن به نود هدف مراحل پیدا کردن مسیر(راه حل) رو لطفا توضیح بدید.اول تو الگوریتم A* بعد هم تو برنامه خودتون.
(یه چیزی که به ذهن خودم میرسه اینه که رشته عملیات اعمال شده تو هر گره ذخیره بشه یعنی هر گره مسیر گره ریشه تا خودش رو فقط با علائمی مثل UP_Down_Right_Left تو یه string ذخیره کنه.)
خیلی ممنون
اگر سوال اولت جدی بود باید بگم که نه قرار نیست توی آواتار عکس خودم باشه دوما یعنی شما امام موسی صدر رو نمیشناسین؟!!
در مورد سوال فنی؛ به نظر میاد باید یه بار دیگه خود الگوریتم *A رو بررسی کنید. توی این الگوریتم روش کار به این صورت هست (البته توی مسئله خودمون): برای هر گره مقدار تابع هیورستیک رو محاسبه می کنه ضمنا هر گره دارای یک مقدار هست که هزینه رسیدن به این گره رو از ابتدای حرکت مشخص می کنه.
تابع نهایی مورد استفاده از جمع این دو تا حاصل میشه و براساس مقدار این تابع توی یک صف اولویت قرار می گیره هر گره ای که مقدار کمتری داشته باشه در ابتدای صف قرار میگیره .
ابتدای کار هیچ گرهی توی صف نیست و بعد از محاسبه دو مقدار بالا حالت کنونی وارد صف شده و چون تنها حالت موجود هست پس این گره از صف خارج شده و فرزندان این گره تولید شده و مقدار تابع محاسبه شده و براساس اولویت توی صف قرار می گیرند. حالت پدر به عنوان یک گره بازدید شده علامت می خوره (با قرار دادن هزینه تابع زیاد برای اون گره) که اگر احیانا در ادامه کار دوباره این گره تولید شد به دلیل تکراری بودن وارد صف نشه که توی حلقه گیر کنیم. (بنابراین هیچ گرهی حذف نمیشه)
برای یافتن مسیر، هر گره یک آرایه داره که نشون می ده از ابتدای مسیر چطور به این گره رسیدیم. و توی این آرایه مثلا از عبارات UP_Down_Right_Left که اشاره کردید استفاده میشه.
پس بعد از اینکه به جواب رسیدیم می تونیم محتوای این آرایه رو از ابتدا روی حالت اولیه اجرا کنیم تا به جواب برسیم.
امیدوارم متوجه شده باشی