پیمایش عرضی (BFS)

پیمایش عرض اول با صف: بازدید سطح به سطح، پیدا کردن کوتاه‌ترین مسیر در گراف بدون وزن و کاربردها

BFS چیست؟

پیمایش عرض اول (Breadth-First Search) گراف را سطح به سطح پیمایش می‌کند: اول همه همسایه‌های رأس شروع، بعد همسایه‌های همسایه‌ها و... — درست مثل موجی که در آب پخش می‌شود.

ابزار کلیدی: صف

BFS از صف (FIFO) استفاده می‌کند:

  1. رأس شروع را در صف بگذار و «دیده‌شده» علامت بزن
  2. رأس جلوی صف را بردار و پردازش کن
  3. همه همسایه‌های دیده‌نشده را به صف اضافه و علامت بزن
  4. تکرار تا خالی‌شدن صف

علامت‌گذاری حیاتی است — وگرنه در گراف دارای دور، بی‌نهایت می‌چرخیم!

مثال گام‌به‌گام

گراف:  A - B - D
       |       |
       C - E - F

BFS از A:
صف: [A]           بازدید: A
صف: [B, C]        بازدید: B
صف: [C, D]        بازدید: C
صف: [D, E]        بازدید: D
صف: [E, F]        بازدید: E
صف: [F]           بازدید: F

ترتیب: A, B, C, D, E, F  (سطح به سطح)

قدرت ویژه: کوتاه‌ترین مسیر (بدون وزن)

در گراف بدون وزن، BFS همیشه کوتاه‌ترین مسیر (کمترین تعداد یال) را پیدا می‌کند! چون سطح به سطح پیش می‌رود، اولین باری که به هدف می‌رسد، از کوتاه‌ترین راه آمده است.

برای پیدا کردن خود مسیر، والد هر رأس را ذخیره می‌کنیم و در پایان از هدف به عقب می‌رویم.

پیچیدگی

معیارپیچیدگی
زمان (لیست همسایگی)O(V + E) ✓
حافظهO(V) — صف + مجموعه دیده‌شده

کاربردهای واقعی

نکته: BFS = صف، DFS = پشته/بازگشت. اگر کوتاه‌ترین مسیر بدون وزن می‌خواهید حتماً BFS؛ DFS ممکن است مسیر طولانی‌تر پیدا کند.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل ساختار داده و الگوریتم است.

ابزارهای مرتبط