# BFS

Try them all

Explore one thoroughly

*What do you do when you have many different options?*

Navigating Graphs

Navigating Graphs

Try them all

Explore one thoroughly

*What do you do when you have many different options?*

Phase 0.

Identify a

starting point \(s\).

Phase 1.

Collect

all friends of \(s\).

Phase 0.

Identify a

starting point \(s\).

Phase 1.

Collect

all friends of \(s\).

Phase 0.

Identify a

starting point \(s\).

Phase k.

Collect

anyone who is a

friend of

anyone seen before.

\(\cdots\)

\(s\)

\(x\)

\(y\)

\(w\)

\(z\)

\(s\)

\(x\)

\(y\)

\(w\)

\(z\)

\(s\)

\(x\)

\(y\)

\(w\)

\(z\)

\(s\)

\(x\)

\(y\)

\(w\)

\(z\)

Phase 1.

Collect

all friends of \(s\).

Phase 0.

Identify a

starting point \(s\).

Phase k.

Collect

anyone NEW

who is a

friend of

anyone seen before.

\(\cdots\)

*Implementation?*

ask *every* **unvisited node** if

they are adjacent to

*any*** visited node**.

**Phase #\(k\).**

execute_one_round(): for all v in V(G):

```
if v is not in visited:
```

```
for all u in N(v):
if u is in visited:
mark v
``````
add all marked vertices to visited
```

execute_one_round(): for all v in boundary(G):

```
for all u in N(v):
if u is unvisited &
has unvisited neighbors:
mark u RED
else if u is unvisited:
mark u BLUE
``````
move boundary to deadzone
add all RED vertices to boundary + visited
```

`add all BLUE vertices to deadzone + visited`

visited = [s] repeat n times:

execute_one_round()

```
visited[s] = true
add s to head of Q
while Q is non-empty:
v = pop(Q) //remove the head of Q
for u in N(v):
if visited[u] is false:
add u to visited and push(Q,u)
```

0

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

0

01

03

04

05

07

08

09

11

12

13

14

15

16

17

18

19

20

21

22

23

24

0

01

04

05

08

09

12

13

14

16

17

18

19

20

21

22

23

24

#### Breadth-First Search

By Neeldhara Misra

# Breadth-First Search

- 125