plan cs 312: bfs and dfs implementation

2
CS 312: BFS and DFS implementation Dan Sheldon February 10, 2015 Plan I Generic Graph Traversal I Graph Data Structure: Adjacency Lists I Directed Graphs and Toplogical Sort Generic Graph Traversal Maintain set of explored nodes and discovered I Explored = have seen this node and explored all of its outgoing edges I Discovered = the “frontier”. Have seen the node, but not explored its outgoing edges. Picture on board Generic Graph Traversal: Node Version Let A = data structure of discovered nodes Traverse(s) Put s in A while A is not empty do Take a node v from A if v is not marked ”explored” then Mark v as ”explored” for each edge (v,w) incident to v do Put w in A end for end if end while Generic Graph Traversal Let A = data structure of discovered nodes Traverse(s) Put s in A while A is not empty do Take a node v from A if v is not marked ”explored” then Mark v as ”explored” for each edge (v,w) incident to v do Put w in A end for end if end while BFS: A is a queue (FIFO) DFS: A is a stack (LIFO) Examples “Proof by example” I BFS with queue I DFS with stack

Upload: others

Post on 22-Apr-2022

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Plan CS 312: BFS and DFS implementation

CS 312: BFS and DFS implementation

Dan Sheldon

February 10, 2015

Plan

I Generic Graph Traversal

I Graph Data Structure: Adjacency Lists

I Directed Graphs and Toplogical Sort

Generic Graph Traversal

Maintain set of explored nodes and discovered

I Explored = have seen this node and explored all of its outgoingedges

I Discovered = the “frontier”. Have seen the node, but notexplored its outgoing edges.

Picture on board

Generic Graph Traversal: Node Version

Let A = data structure of discovered nodes

Traverse(s)

Put s in Awhile A is not empty do

Take a node v from Aif v is not marked ”explored” then

Mark v as ”explored”for each edge (v, w) incident to v do

Put w in Aend for

end if

end while

BFS: A is a queue (LIFO)DFS: A is a stack (LIFO)

Generic Graph Traversal

Let A = data structure of discovered nodes

Traverse(s)

Put s in Awhile A is not empty do

Take a node v from Aif v is not marked ”explored” then

Mark v as ”explored”for each edge (v, w) incident to v do

Put w in Aend for

end if

end while

BFS: A is a queue (FIFO)DFS: A is a stack (LIFO)

Examples

“Proof by example”

I BFS with queue

I DFS with stack

Page 2: Plan CS 312: BFS and DFS implementation

Generic Graph Traversal: Edge Version

To return a tree, put edges instead of nodes on TODO list

Traverse(s)

T = {} . BFS/DFS treePut (�, s) in Awhile A is not empty do

Take an edge (u, v) from Aif v is not marked ”explored” then

T = T [ (u, v)Mark v as ”explored”for each edge (v, w) incident to v do

Put edge (v, w) in Aend for

end if

end while

Return T

Running Time?

Traverse(s)

Put s in Awhile A is not empty do

Take a node v from Aif v is not marked ”explored” then

Mark v as ”explored”for each edge (v, w) incident to v do

Put w in Aend for

end if

end while

Discuss on board. Running time is O(m+ n), pending correct datastructure

n2m

2m2m

2m

2m

Representing Graphs: Adjacency List

Adjacency list. Each node keeps a (linked) list of neighbors.!

How long to find a specific edge?!How long to find all edges incident on a node?

1

3

5 4

21

2

3

4

5

2 4 5

1 3 4

2 5

1 2

1 3

Graph Traversal: Summary

BFS/DFS: O(m+ n)

I Is G connected?I Find connected components of GI Find distance of every vertex from sourceI Get BFS/DFS trees (useful in other applications)

BFS: explore by distance; layers; queueDFS: explore deeply; recursive; stack