🔍 الگوریتم جستجوی Wredth-First (BFS)

🧠 این را تصور کنید:
شما در پیچ و خم اتاق هستید. شما می خواهید کوتاهترین راه را پیدا کنید. بنابراین از اتاق اول شروع می کنید ، تمام اتاق های مجاور را بررسی کنید ، سپس به لایه بعدی اتاق ها بروید و تا رسیدن به خروجی ، گسترش دهید.
این جستجوی وسعت اول (BFS) است-شما لایه بر روی لایه ، سطح بر اساس سطح را کشف می کنید.
bs BFS چیست؟
Wreadth-First Search (BFS) یک الگوریتم اساسی نمودار Traversal است که سطح گره ها را بر اساس سطح بررسی می کند. این امر به ویژه برای یافتن کوتاهترین مسیر در نمودارهای بدون وزنی مفید است.
به این فکر کنید مانند کاوش در یک درخت به صورت افقی: شما قبل از رفتن به پسر عموی خود ، همه خواهر و برادرهای خود را بررسی می کنید!
🧠 چگونه کار می کند
1. از یک گره شروع کنید (مثلاً گره 0).
2. از یک صف استفاده کنید تا به خاطر داشته باشید “چه چیزی برای بازدید بعدی”.
3. بازدید از[] آرایه بنابراین بازدیدهای خود را تکرار نمی کنید.
4. برای هر گره:
همسایگان بی نظیر خود را به صف اضافه کنید.
یکی یکی از آنها بازدید کنید.
📥queue نظم را تضمین می کند – اول ، اول. مناسب برای سطح سطح
سفر
🤝 موارد استفاده در دنیای واقعی
پیشنهادات شبکه اجتماعی (چه کسی 1 دوست از دوست شما دور است؟)
خزیدن
کوتاهترین مسیر در نمودارهای بدون وزنی
شبکه های همتا به همسالان
🔄 مثال اجرای خشک (نمودار)
order سفارش Traversal: 1 → 2 → 3 → 4 → 5
✅ توضیح:
از گره 1 → همسایگان Enqueue 2 و 3 شروع کنید
به 2 → Enqueue 4 مراجعه کنید
به 3 → Enqueue 5 مراجعه کنید
بازدید از 4 (قبلاً اضافه شده)
بازدید از 5
صف خالی می شود.
#include
#include
#include
using namespace std;
vector bfsOfGraph(int V, vector adj[]) {
vector bfs;
vector visited(V, false);
queue q;
// Start BFS from node 0
q.push(0);
visited[0] = true;
while (!q.empty()) {
int node = q.front();
q.pop();
bfs.push_back(node);
for (int neighbor : adj[node]) {
if (!visited[neighbor]) {
visited[neighbor] = true;
q.push(neighbor);
}
}
}
return bfs;
}
int main() {
int V = 5;
vector adj[V];
// Undirected Graph Example
adj[0] = {1, 2};
adj[1] = {0, 3};
adj[2] = {0, 4};
adj[3] = {1};
adj[4] = {2};
vector result = bfsOfGraph(V, adj);
cout << "BFS Traversal: ";
for (int node : result)
cout << node << " ";
cout << endl;
return 0;
}
📈 پیچیدگی زمان و فضا
پیچیدگی زمانی: o (v + e)
پیچیدگی فضا: o (v)
جایی که V تعداد راس ها و E تعداد لبه ها است.
🧊 غذای اصلی
BFS برای یافتن کوتاهترین مسیر (در نمودارهای بدون وزنی) بسیار عالی است.
از یک صف برای عبور از سطح به سطح استفاده می کند.
ایده آل وقتی می خواهید ابتدا همه چیز نزدیک خود را کشف کنید.