الگوریتم جستجوی اول سطح (Breadth-First Search) یکی از مهمترین الگوریتمهای جستجو در گرافها و درختها است که در بسیاری از مسائل و کاربردهای مختلف مورد استفاده قرار میگیرد. در این مقاله، به توضیحات جامعی پیرامون عملکرد، اصول و کاربردهای الگوریتم جستجوی اول سطح در گرافها پرداختهایم.
مقدمه
در نظریه گراف، جستجوی اول سطح یکی از الگوریتمهای پیمایش گراف است. استراتژی جستجوی سطح اول برای پیمایش گراف، همانطور که از نامش پیداست «جستجوی سطح به سطح گراف» است.
الگوریتم از ریشه شروع میکند (در گرافها و یا درختهای بدون ریشه رأس دلخواهی به عنوان ریشه انتخاب میشود) و آن را در سطح یک قرار میدهد. سپس در هر مرحله همه همسایههای رئوس آخرین سطح را که تا به حال دیده نشدهاند بازدید میکند و آنها را در سطح بعدی میگذارد. این فرایند زمانی متوقف میشود که همه همسایههای رئوس آخرین سطح قبلاً دیده شوند.
از نقطه نظر عملی، برای پیادهسازی این الگوریتم از صف استفاده میشود. بدین ترتیب که در ابتدا ریشه در صف قرار میگیرد. سپس هر دفعه عنصر ابتدای صف را بیرون میکشد، همسایگانش بررسی می شوند هر همسایهای که تا به حال دیده نشده باشد به انتهای صف اضافه میشود. جزئیات پیادهسازی در ادامه می آید.

اصول عملکرد
- انتخاب رأس شروع: انتخاب یک رأس به عنوان نقطه شروع برای جستجو.
- جستجو در سطح: انجام جستجو برای رئوس مجاور رأس شروع.
- ادامه به رئوس سطح بالاتر: پس از انجام عملیات برای تمامی رئوس یک سطح، به سطح بعدی حرکت کرده و عملیات را تکرار میکنیم.
- تکرار مراحل: مراحل 2 و 3 تا زمانی که یک راه حل یا یک حالت مورد نظر پیدا شود یا تمام رئوس گراف بررسی شوند، تکرار میشود.
مراحل عملکرد
- اضافه کردن رأس شروع به صف: رأس شروع به عنوان نخستین عضو صف قرار میگیرد.
- بررسی رأس ابتدایی: رأس ابتدایی از صف خارج و بررسی میشود.
- انجام عملیات: عملیات مربوط به رأس بررسی (مانند چاپ یا ذخیره اطلاعات) میشود.
- افزودن رئوس مجاور به صف: رئوس مجاور به رأس بررسی واضافه می شودو فرآیند جستجو ادامه مییابد.
- تکرار مراحل: مراحل 2 تا 4 تا زمانی که صف خالی شود، تکرار میشود.
مثال
یک گراف ساده بدون جهت را در نظر بگیرید که یک شبکه از شهرها است که توسط جادهها به هم متصل شدهاند. هر گره در گراف یک شهر را نشان میدهد و هر یال یک جاده بین دو شهر را نمایش میدهد. ما میخواهیم مسیر کوتاهترین از یک شهر شروع به یک شهر مقصد را با استفاده از الگوریتم جستجوی سطحی پیدا کنیم.
فرض کنید ما گراف زیر را داریم:

در این گراف:
- گره A شهر A را نشان میدهد.
- گره B شهر B را نشان میدهد.
- گره C شهر C را نشان میدهد.
- گرههای D، E و F به ترتیب شهرهای D، E و F را نشان میدهند.
- یالها جادههایی هستند که شهرها را به هم متصل میکنند.
فرض کنید ما میخواهیم مسیر کوتاهترین از شهر A به شهر F را پیدا کنیم. میتوانیم از الگوریتم جستجوی سطحی برای کاوش گراف لایه به لایه استفاده کنیم:
- با شهر A شروع کنید.
- تمام شهرهای مستقیماً به A (B و C)را کاوش کنید.
- به لایه بعدی حرکت کنید و شهرهای مستقیماً به B و C (D و E و F)را کاوش کنید.
- این فرآیند را تا زمانی که به شهر F برسیم یا تمام شهرهای قابل دسترس کاوش شوند ادامه دهید.
با اعمال الگوریتم جستجوی سطحی، ما بهترین مسیر از شهر A به شهر F را پیدا میکنیم A -> C -> F.
این مثال نشان میدهد که چگونه الگوریتم جستجوی سطحی برای یافتن مسیر کوتاهتر بین دو گره در یک گراف مورد استفاده قرار می گیرد. که این امر الگوریتم را به یک ابزار ارزشمند در کاربردهای مختلفی از جمله برنامهریزی یافتن مسیر، عبور از شبکهها و یافتن مسیرهای کوتاهتر میان نقاط مختلف در یک گراف تبدیل میکند.
کاربردهای جستجوی اول سطح
- جستجوی مسیر: برای پیدا کردن مسیر کوتاه بین دو رأس در گراف، به خصوص در الگوریتمهای روتیابی.
- جستجوی کوتاهترین مسیر: برای پیدا کردن کوتاهترین مسیر بین دو رأس در گراف، با استفاده از جستجوی اول سطح.
- جستجوی حالت در بازیهای رایانهای: در بازیهای مختلفی مانند بازیهای ماجراجویی یا بازیهای معمایی، جستجوی اول سطح برای پیدا کردن حالتهای مختلف بازی استفاده میشود.
- پردازش درختها: برای پردازش درختها مانند درخت جستجوی دودویی، جستجوی اول سطح برای یافتن رئوس و موارد مختلف درخت مفید است.
نکات مهم
- الگوریتم جستجوی اول سطح به دلیل استفاده از یک صف برای ذخیره رئوسی که باید بررسی شوند، به طور کلی مصرف حافظه کمتری نسبت به الگوریتم جستجوی اول عمق دارد.
- از معایب جستجوی اول سطح میتوان به مصرف زمان بیشتر نسبت به الگوریتم جستجوی اول عمق در برخی موارد اشاره کرد.
نکات تکمیلی
الگوریتم جستجوی اول سطح از مهمترین الگوریتمهای جستجو در گرافها و درختها است. با این حال، در برخی موارد ممکن است با توجه به خواص و ساختار گراف، انتخاب الگوریتم مناسب بین جستجوی اول سطح و جستجوی اول عمق اهمیت داشته باشد. به عنوان مثال، در صورتی که مسئله حل شدنی دارد و انتظار داریم که حل از یک مسیر کوتاهتر یا راه حل سریعتر به دست آید، الگوریتم جستجوی اول سطح ممکن است بهترین گزینه باشد. اما در صورتی که مسئله حل نشود، باید به دنبال یک حالت یا راه حل خاص بگردیم. الگوریتم جستجوی اول عمق ممکن است بهترین انتخاب باشد.
نتیجهگیری
با استفاده از اصول و مراحل عملکرد الگوریتم جستجوی اول سطح، میتوان به بهترین شیوه ممکن از آن برای حل مسائل مختلف استفاده کرد و به نتایج دقیق و مطلوب دست یافت. به کمک کاربردهای گوناگون آن، میتوان در حل مسائل مختلفی از جمله پردازش گراف، حل مسائل بازیهای رایانهای، و پیدا کردن مسیرهای مختلف بین نقاط در یک گراف بهره برد.