Skip to content

Commit 60a11aa

Browse files
committed
A fine bfs
1 parent 54047a7 commit 60a11aa

File tree

1 file changed

+9
-45
lines changed

1 file changed

+9
-45
lines changed

bfs.cpp

Lines changed: 9 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,14 @@
1-
#include <bits/stdc++.h> /* этот хедер доступен только под gcc и по сути является просто инклудом с кучей других часто используемых инклудов */
2-
using namespace std;
3-
4-
int main(){
5-
6-
/* обозначения:
7-
n - число вершин,
8-
m - число рёбер,
9-
g[][] - граф,
10-
s - начало пути,
11-
t - конец пути,
12-
q - очередь на обработку вершин,
13-
d[] - расстояния от s (-1, если вершина недостижима из s)
14-
*/
15-
16-
int n, m;
17-
cin >> n >> m;
18-
19-
/* храним граф в виде "вектора векторов", т. е. g[v] содержит вектор-список всех соседней v */
20-
/* выбор такой структуры обусловлен тем, что вектор легко автоматически масштабируется */
21-
vector< vector<int> > g(n);
22-
23-
while(m--){ /* цикл исполнится ровно m раз, я гарантирую это */
24-
int u, v;
25-
cin >> u >> v;
26-
g[u].push_back(v);
27-
g[v].push_back(u);
28-
}
29-
30-
int s, t;
31-
cin >> s >> t;
32-
33-
vector<int> d(n, -1); /* изначально будем считать недостижимыми все вершины, кроме s */
1+
vector<int> bfs(int s){
2+
vector<int> d(n, -1);
343
d[s] = 0;
35-
364
queue<int> q;
375
q.push(s);
38-
39-
while(!q.empty()){
40-
int v = q.front(); /* записываем id первой вершины в очереди */
41-
q.pop(); /* ...и сразу же её оттуда удаляем */
42-
for(int u : g[v]) /* уникальная фишка C++11, означает "перебрать все элементы g[v], копируя их при каждой итерации в u; просто перебираем всех соседей v */
43-
if(d[u] == -1) /* следует читать как "если вершина u не была посещена ранее" */
44-
d[u] = d[v] + 1, q.push(v); /* устанавливаем расстояние и пихаем u в конец очереди */
6+
while(q.size()){
7+
int v = q.top();
8+
q.pop();
9+
for(int u : g[v])
10+
if(d[u] == -1)
11+
d[u] = d[v]+1, q.push(u);
4512
}
46-
47-
cout << d[t];
48-
49-
return 0;
13+
return d;
5014
}

0 commit comments

Comments
 (0)