Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics,...
-
Upload
morgan-doyle -
Category
Documents
-
view
219 -
download
1
Transcript of Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics,...
![Page 1: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/1.jpg)
Graphs
Data Structures and Algorithms
CS 244
Brent M. Dingle, Ph.D.
Department of Mathematics, Statistics, and Computer Science
University of Wisconsin – Stout
Based on the book: Data Structures and Algorithms in C++ (Goodrich, Tamassia, Mount)Some content from Data Structures Using C++ (D.S. Malik)
![Page 2: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/2.jpg)
In the Past• Priority Queues and Sorting
• Unordered List implementation• Selection Sort
• Ordered List implementation• Insertion Sort
• Heaps • Binary tree implemented using a vector array• Heap Sort
• A Priority Queue Sort using a heap
• Building a Heap Inserting one element at a time• Building a Heap Bottom Up
• Searching• Binary Search Trees• AVL trees• Decision Trees• Hash Tables
![Page 3: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/3.jpg)
For Today• Quick review of Double Hashing
• Then Graphs
• Will see a LOT of earlier material put together
![Page 4: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/4.jpg)
Marker Slide• General Questions?
• Next• Hashing
• Open Addressing: Double Hashing
• Graphs
![Page 5: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/5.jpg)
Open Addressing: Double Hashing
• Double hashing uses a secondary hash function d(k) and handles collisions by placing an item in the first available cell of the seriesh(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N - 1
• The secondary hash function d(k) cannot have zero values
• The table size N must be a prime to allow probing of all the cells
• Common choice of compression map for the secondary hash function:
d(k) = q - (k mod q)
where– q < N– q is a prime
• The possible values for d(k) are
1, 2, … , q
REVIEW
![Page 6: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/6.jpg)
Class Exercise: Double Hashing
• Assume you have a hash table H with N=11 slots (H[0,10]) and let the hash functions for double hashing be– h(k,i)=( h(k) + i*d(k) ) mod N– h(k) = k mod N – d(k) = 5 - (k mod 5)
• Demonstrate (by picture) the insertion of the following keys into H– 10, 22, 31, 4, 15, 26
Double hashing uses a secondary hash function d(k) and handles collisions by placing an item in the first available cell of the series:h(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N - 1
Next Slide is Start Slide
![Page 7: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/7.jpg)
• Consider a hash table storing integer keys that handles collision with double hashing– N = 11 – h(k) = k mod 11 – d(k) = 5 - (k mod 5)
• Insert keys – 10, 22, 31, 21, 15, 26
Example of Double Hashing
h(k,i) =(h(k) + i*d(k)) mod Nd(k) = q - (k mod q)
k h(k) d(k) Probes
10
22
31
21
15
26
Pause for student work
0 1 2 3 4 5 6 7 8 9 10
![Page 8: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/8.jpg)
• N = 11 • h(k) = k mod 11 • d(k) = 5 - (k mod 5)
Example of Double Hashing
100 1 2 3 4 5 6 7 8 9 10
k h(k) d(k) Probes
10 10 5 10
22
31
21
15
26h(10) = 10 mod 11 = 10d(10) = 5 – (10 mod 5) = 5 – 0 = 5
h(10, 0) = (10 + 0) mod 11 = 10
h(10, 1) = (10 + 1*5) mod 11 = 4
h(10, 2) = (10 + 2*5) mod 11 = 9
h(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N – 1 i is the probe attempt number
![Page 9: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/9.jpg)
• N = 11 • h(k) = k mod 11 • d(k) = 5 - (k mod 5)
Example of Double Hashing
22 100 1 2 3 4 5 6 7 8 9 10
k h(k) d(k) Probes
10 10 5 10
22 0 3 0
31
21
15
26
h(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N – 1 i is the probe attempt number
h(22) = 22 mod 11 = 0d(22) = 5 – (22 mod 5) = 5 – 2 = 3
h(22, 0) = (0 + 0) mod 11 = 0
h(22, 1) = (0 + 1*3) mod 11 = 3
h(22, 2) = (0 + 2*3) mod 11 = 4
![Page 10: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/10.jpg)
• N = 11 • h(k) = k mod 11 • d(k) = 5 - (k mod 5)
Example of Double Hashing
22 31 100 1 2 3 4 5 6 7 8 9 10
k h(k) d(k) Probes
10 10 5 10
22 0 3 0
31 9 4 9
21
15
26
h(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N – 1 i is the probe attempt number
h(31) = 31 mod 11 = 9d(31) = 5 – (31 mod 5) = 5 – 1 = 4
h(31, 0) = (9 + 0) mod 11 = 9
h(31, 1) = (9 + 1*4) mod 11 = 2
h(31, 2) = (9 + 2*4) mod 11 = 6
![Page 11: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/11.jpg)
• N = 11 • h(k) = k mod 11 • d(k) = 5 - (k mod 5)
Example of Double Hashing
22 31 100 1 2 3 4 5 6 7 8 9 10
k h(k) d(k) Probes
10 10 5 10
22 0 3 0
31 9 4 9
21 10 4 10
15
26
h(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N – 1 i is the probe attempt number
h(21) = 21 mod 11 = 10d(21) = 5 – (21 mod 5) = 5 – 1 = 4
h(21, 0) = (10 + 0) mod 11 = 10
h(21, 1) = (10 + 1*4) mod 11 = 3
h(21, 2) = (10 + 2*4) mod 11 = 7
![Page 12: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/12.jpg)
• N = 11 • h(k) = k mod 11 • d(k) = 5 - (k mod 5)
Example of Double Hashing
22 21 31 100 1 2 3 4 5 6 7 8 9 10
k h(k) d(k) Probes
10 10 5 10
22 0 3 0
31 9 4 9
21 10 4 10 3
15
26
h(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N – 1 i is the probe attempt number
h(21) = 21 mod 11 = 10d(21) = 5 – (21 mod 5) = 5 – 1 = 4
h(21, 0) = (10 + 0) mod 11 = 10
h(21, 1) = (10 + 1*4) mod 11 = 3
h(21, 2) = (10 + 2*4) mod 11 = 7
![Page 13: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/13.jpg)
• N = 11 • h(k) = k mod 11 • d(k) = 5 - (k mod 5)
Example of Double Hashing
22 31 100 1 2 3 4 5 6 7 8 9 10
k h(k) d(k) Probes
10 10 5 10
22 0 3 0
31 9 4 9
21 10 4 10 3
15 4 5 4
26
h(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N – 1 i is the probe attempt number
h(15) = 15 mod 11 = 4d(15) = 5 – (15 mod 5) = 5 – 0 = 5
h(15, 0) = (4 + 0) mod 11 = 4
h(15, 1) = (4 + 1*5) mod 11 = 9
h(15, 2) = (4 + 2*5) mod 11 = 3
21 15
![Page 14: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/14.jpg)
• N = 11 • h(k) = k mod 11 • d(k) = 5 - (k mod 5)
Example of Double Hashing
22 31 100 1 2 3 4 5 6 7 8 9 10
k h(k) d(k) Probes
10 10 5 10
22 0 3 0
31 9 4 9
21 10 4 10 3
15 4 5 4
26 4 4 4
h(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N – 1 i is the probe attempt number
h(26) = 26 mod 11 = 4d(26) = 5 – (26 mod 5) = 5 – 1 = 4
h(26, 0) = (4 + 0) mod 11 = 4
h(26, 1) = (4 + 1*4) mod 11 = 8
h(26, 2) = (4 + 2*4) mod 11 = 1
21 15
![Page 15: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/15.jpg)
• N = 11 • h(k) = k mod 11 • d(k) = 5 - (k mod 5)
Example of Double Hashing
22 26 31 100 1 2 3 4 5 6 7 8 9 10
k h(k) d(k) Probes
10 10 5 10
22 0 3 0
31 9 4 9
21 10 4 10 3
15 4 5 4
26 4 4 4 8
h(k,i) =(h(k) + i*d(k)) mod N for i = 0, 1, … , N – 1 i is the probe attempt number
h(26) = 26 mod 11 = 4d(26) = 5 – (26 mod 5) = 5 – 1 = 4
h(26, 0) = (4 + 0) mod 11 = 4
h(26, 1) = (4 + 1*4) mod 11 = 8
h(26, 2) = (4 + 2*4) mod 11 = 1
21 15
![Page 16: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/16.jpg)
Marker Slide• Questions on:• Hashing
• Open Addressing: Double Hashing
• Next• Graphs
• Definitions and Examples• Representing as a data structure
![Page 17: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/17.jpg)
Königsberg Bridge
• The river Pregel flows around the island Kneiphof and then divides in two
• The river has 4 land areas: A, B, C, and D• There are 7 bridges: a, b, c, d, e, f, g
• Question: Is it possible to walk across all the bridges exactly oncesuch that you start and end on the same land area ?
Pause for student answer
![Page 18: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/18.jpg)
1736 – Euler • In 1736, Euler presented the
problem as a graph
• Answered the question in the negative
• Viola!Graph Theory is born.
![Page 19: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/19.jpg)
Graph Theory• What follows is a VERY BRIEF summary• Learn more on graph theory by taking more math classes.
• A graph is a pair, G = (V, E)• where V is a finite nonempty set
called the set of vertices of G• and E is the set of edges, E V V
• V(G) denotes the vertices of G• E(G) denotes the edges of G
![Page 20: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/20.jpg)
Graphs• If the elements of E are ordered pairs• G is called a directed graph, or digraph
• Otherwise• G is called an undirected graph
![Page 21: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/21.jpg)
Subgraphs• Let G be a graph
• A graph H is a subgraph of G • if V(H) V(G) and E(H) E(G)
• i.e. every vertex of H is a vertex of G and every edge of H is an edge in G
![Page 22: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/22.jpg)
Pictures are “easy”• Vertices of graphs
are drawn as labeled circles
• Edges of undirected graphs are drawn as lines
• Edges of directed graphs are drawn as arrows
Examples of undirected graphs
Examples of directed graphs
A Side NOTE: It would be better if G1 started numbering itsvertices with 0, not 1It lines up better with C++ array indices starting at 0
![Page 23: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/23.jpg)
Notation Example
• The above directed graphs have vertices and edges of• V(G1) = {1, 2, 3, 4, 5} • E(G1) = {(1, 2), (1, 4), (2, 5), (3, 1), (3, 4), (4, 5)}
• V(G2) = {0, 1, 2, 3, 4} • E(G2) = {(0, 1), (0, 3), (1, 2), (1, 4), (2, 1), (2, 4), (4, 3)}
• V(G3) = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} • E(G3) = {(0, 1), (0, 5), (1, 2), (1, 3), (1, 5), (2, 4), (4, 3), (5, 6), (6, 8), (7,
3), (7, 8), (8, 10), (9, 4), (9, 7), (9, 10)}
The edges of directed graphs are ordered pairsSo (1,2) implies an edge from vertex 1 to vertex 2
![Page 24: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/24.jpg)
Adjacent Vertices• Let G be an undirected graph
• Let u and v be two vertices in G
• Then u and v are adjacent if there is an edge from one to the other• ( u, v ) E(G)
![Page 25: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/25.jpg)
Paths• There is a path from u to v if there is a sequence of
vertices u1, u2, …, un such that u = u1, un = v and (ui, ui+1) is an edge for all i = 1, 2, .., n-1.
• Vertices u and v are called connected if there is a path from u to v
• A simple path is a path in which all the vertices, except possibly the first and last, are distinct.
![Page 26: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/26.jpg)
Cycles• Let G be a graph
• A cycle in G is a simple path in which the first and last vertices are the same• i.e. you can go in a circle
starting at vertex u and ending and vertex u.
![Page 27: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/27.jpg)
Marker Slide• Questions on:• Hashing
• Open Addressing: Double Hashing
• Graphs• Definitions and Examples
• Next• Graphs: Representing as a data structure
• Adjacency Matrix• Adjacency List
![Page 28: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/28.jpg)
Graph Representation• Lots of graph theory problems exist
• Would be nice to have a way to work on them with computers
• Need a data structure
• Two common ways• Adjacency Matrices• Adjacency Lists
![Page 29: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/29.jpg)
Definition Adjacency Matrix• Let G be a graph with n vertices ( n > 0)
• Let V(G) = { v1, v2, …, vn }
• The adjacency matrix AG is a 2D n n matrix such that
• if there is an edge from vi to vj then the (i, j)th entry of AG is 1 else if there is not and edge then the (i, j)th entry of AG entry is 0
• Not this implies for undirected graphs the adjacency matrix must be symmetric
![Page 30: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/30.jpg)
Adjacency Matrix: Example• V(G1) = {1, 2, 3, 4, 5}
• E(G1) = {(1, 2), (1, 4), (2, 5), (3, 1), (3, 4), (4, 5)}
• Adjacency Matrix AG1 isSide Note: It would be better if G1 started numbering itsvertices with 0, not 1It lines up better with C++ array indices starting at 0
![Page 31: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/31.jpg)
Marker Slide• Questions on:• Hashing
• Open Addressing: Double Hashing
• Graphs• Definitions and Examples• Adjacency Matrix
• Next• Graphs: Representing as a data structure
• Adjacency List
![Page 32: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/32.jpg)
Adjacency Lists• Let G be a graph with n vertices ( n > 0)
• Let V(G) = { v1, v2, …, vn }
• The adjacency list of G is an array of linked listssuch that• The array has one list for each vertex v
• i.e. array size is n
• The list for vertex v contains a list of vertices such that if vertex u is in the list then the edge (v, u) is in E(G)
![Page 33: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/33.jpg)
Adjacency List: Example• V(G1) = {1, 2, 3, 4, 5}
• E(G1) = {(1, 2), (1, 4), (2, 5), (3, 1), (3, 4), (4, 5)}
• Adjacency List, AL, of G1 is
Side Note: It would be better if G1 started numbering itsvertices with 0, not 1It lines up better with C++ array indices starting at 0As is seen in this example, it is confusing when theydo not match
all vertices have 1 subtracted from themAL[0]
AL[1]
AL[2]
AL[3]
AL[4]
1 3
4
0 3
4
![Page 34: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/34.jpg)
Marker Slide• Questions on:• Hashing• Graphs
• Definitions and Examples• Adjacency Matrix• Adjacency List
• Next• Graphs
• Operations and ADT• Some code for reference
![Page 35: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/35.jpg)
Graph ADT Operations• Create a graph
• Add vertex• Add edge
• Clear the graph• Delete vertex• Delete edge
• Edge Query• Is the directed edge (u, v) or the undirected edge {u, v} in the graph?
• Determine if the graph Is Empty
• Traverse the graph
• Print the graph
![Page 36: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/36.jpg)
Graph ADT Implementationclass graphType{public: graphType(int size = 0); //Constructor //Postcondition: gSize = 0; maxSize = size; // graph is an array of pointers to linked lists. ~graphType(); //Destructor //The storage occupied by the vertices is deallocated.
bool isEmpty() const; //Function to determine whether the graph is empty. //Postcondition: Returns true if the graph is empty; // otherwise, returns false. void createGraph(); //Function to create a graph. //Postcondition: The graph is created using the // adjacency list representation. void clearGraph(); //Function to clear graph. //Postcondition: The memory occupied by each vertex // is deallocated. void printGraph() const; //Function to print graph. //Postcondition: The graph is printed.
void depthFirstTraversal(); //Function to perform the depth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the depth first traversal algorithm.
void dftAtVertex(int vertex); //Function to perform the depth first traversal of //the graph at a node specified by the parameter vertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm. void breadthFirstTraversal(); //Function to perform the breadth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the breadth first traversal algorithm.private: int maxSize; //maximum number of vertices
int gSize; //current number of vertices
unorderedLinkedList<int> *graph; //array to create adjacency lists
void dft(int v, bool visited[]); //Function to perform the depth first traversal of the graph at a node //specified by the parameter vertex. This function is used by the public //member functions depthFirstTraversal and dftAtVertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm.};
Member variable graph is a dynamically allocated array of unordered Linked Listswhich is a User Defined Class Type -- described Next Slides
Once again we are using an already created class data type to make another one
![Page 37: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/37.jpg)
Constructor for class GraphType
• the member variable: graphIs a dynamically allocated array of unorderedLinkedLists• So we need to see what that data type is
graphType::graphType(int size){ maxSize = size; gSize = 0; graph = new unorderedLinkedList<int>[size];}
![Page 38: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/38.jpg)
linkedListType<Type>• The unordered linked
list type will be derived from a more generic linkedListType as shown to the right
![Page 39: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/39.jpg)
unorderedLinkedList<Type>
![Page 40: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/40.jpg)
unorderedLinkedList<Type>
unorderedLinkedList<Type> overrides/implements these (virtual) functions of the base class
![Page 41: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/41.jpg)
unorderedLinkedList: node Type• Typical node structure
for linked lists• similar to previous• some renaming
• info was data• *link was *next
• Aside: this node is declared as a struct instead of a class• so the constructor is also not there• simpler version, but prone to more
initialization errors
template <class Type>struct nodeType{ Type info; nodeType<Type> *link;};
![Page 42: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/42.jpg)
unorderedLinkedList: constructor• Default constructor for
the unorderedLinkList
template <class Type>linkedListType<Type>::linkedListType(){ first = NULL; last = NULL; count = 0;}
![Page 43: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/43.jpg)
unorderedLinkedList: print• print() function for the unorderedLinkList
template <class Type>void linkedListType<Type>::print() const{ nodeType<Type> *current; //pointer to traverse the list current = first; //set current point to the first node while (current != NULL) //while more data to print { cout << current->info << " "; current = current->link; }} //end print
![Page 44: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/44.jpg)
unorderedLinkedList: back• back() function for the unorderedLinkList
template <class Type>Type linkedListType<Type>::back() const{ assert(last != NULL); return last->info; //return the info of the last node}//end back
![Page 45: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/45.jpg)
unorderedLinkedList: search• search function for the unorderedLinkList
template <class Type>bool unorderedLinkedList<Type>::search(const Type& searchItem) const{ nodeType<Type> *current; //pointer to traverse the list bool found = false; current = first; //set current to point to the first node in the list while (current != NULL && !found) //search the list if (current->info == searchItem) //searchItem is found found = true; else current = current->link; //make current point to the next node return found;} //end search
![Page 46: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/46.jpg)
unorderedLinkedList: insertLast• insertLast function for the unorderedLinkList
template <class Type>void unorderedLinkedList<Type>::insertLast(const Type& newItem){ nodeType<Type> *newNode; //pointer to create the new node newNode = new nodeType<Type>; //create the new node newNode->info = newItem; //store the new item in the node newNode->link = NULL; //set the link field of newNode to NULL if (first == NULL) //if the list is empty, newNode is both the first and last node { first = newNode; last = newNode; count++; } else //the list is not empty, insert newNode after last { last->link = newNode; //insert newNode after last last = newNode; //make last point to the actual last node in the list count++; }} //end insertLast
![Page 47: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/47.jpg)
unorderedLinkedList: deleteNodetemplate <class Type>void unorderedLinkedList<Type>::deleteNode(const Type& deleteItem){ nodeType<Type> *current; //pointer to traverse the list nodeType<Type> *trailCurrent; //pointer just before current bool found; if (first == NULL) //Case 1; the list is empty. cout << "Cannot delete from an empty list." << endl; else { if (first->info == deleteItem) //Case 2 { current = first; first = first->link; count--; if (first == NULL) //the list has only one node last = NULL; delete current; } else //search the list for the node with the given info { found = false; trailCurrent = first; //set trailCurrent to pnt to 1st node current = first->link; //set current to pnt to the 2nd node
while (current != NULL && !found) { if (current->info != deleteItem) { trailCurrent = current; current = current-> link; } else found = true; }//end while if (found) //Case 3; if found, delete the node { trailCurrent->link = current->link; count--; if (last == current) //node to be deleted was the //last node last = trailCurrent; //update the value of last delete current; //delete the node from the list } else cout << "The item to be deleted is not in " << "the list." << endl; }//end else }//end else}//end deleteNode
![Page 48: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/48.jpg)
Back to the class graphTypeclass graphType{public: graphType(int size = 0); //Constructor //Postcondition: gSize = 0; maxSize = size; // graph is an array of pointers to linked lists. ~graphType(); //Destructor //The storage occupied by the vertices is deallocated.
bool isEmpty() const; //Function to determine whether the graph is empty. //Postcondition: Returns true if the graph is empty; // otherwise, returns false. void createGraph(); //Function to create a graph. //Postcondition: The graph is created using the // adjacency list representation. void clearGraph(); //Function to clear graph. //Postcondition: The memory occupied by each vertex // is deallocated. void printGraph() const; //Function to print graph. //Postcondition: The graph is printed.
void depthFirstTraversal(); //Function to perform the depth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the depth first traversal algorithm.
void dftAtVertex(int vertex); //Function to perform the depth first traversal of //the graph at a node specified by the parameter vertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm. void breadthFirstTraversal(); //Function to perform the breadth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the breadth first traversal algorithm.private: int maxSize; //maximum number of vertices
int gSize; //current number of vertices
unorderedLinkedList<int> *graph; //array to create adjacency lists
void dft(int v, bool visited[]); //Function to perform the depth first traversal of the graph at a node //specified by the parameter vertex. This function is used by the public //member functions depthFirstTraversal and dftAtVertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm.};
Already saw the constructor
![Page 49: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/49.jpg)
Back to the class graphTypeclass graphType{public: graphType(int size = 0); //Constructor //Postcondition: gSize = 0; maxSize = size; // graph is an array of pointers to linked lists. ~graphType(); //Destructor //The storage occupied by the vertices is deallocated.
bool isEmpty() const; //Function to determine whether the graph is empty. //Postcondition: Returns true if the graph is empty; // otherwise, returns false. void createGraph(); //Function to create a graph. //Postcondition: The graph is created using the // adjacency list representation. void clearGraph(); //Function to clear graph. //Postcondition: The memory occupied by each vertex // is deallocated. void printGraph() const; //Function to print graph. //Postcondition: The graph is printed.
void depthFirstTraversal(); //Function to perform the depth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the depth first traversal algorithm.
void dftAtVertex(int vertex); //Function to perform the depth first traversal of //the graph at a node specified by the parameter vertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm. void breadthFirstTraversal(); //Function to perform the breadth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the breadth first traversal algorithm.private: int maxSize; //maximum number of vertices
int gSize; //current number of vertices
unorderedLinkedList<int> *graph; //array to create adjacency lists
void dft(int v, bool visited[]); //Function to perform the depth first traversal of the graph at a node //specified by the parameter vertex. This function is used by the public //member functions depthFirstTraversal and dftAtVertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm.};
Already saw the constructor
How do we create a graph?
![Page 50: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/50.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
Local Variables
![Page 51: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/51.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
As the comments say
![Page 52: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/52.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
Ask the user for a filename to read stuff from
If unable to tell the user and return
![Page 53: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/53.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
Read the number of vertices from the file
![Page 54: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/54.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
For each vertex do stuff
![Page 55: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/55.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
Get the vertex index
![Page 56: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/56.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
Get the first vertex that the current one is connected toi.e. the first vertex that isadjacent to the current
![Page 57: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/57.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
While the adjacent vertx’s index is NOT -999Save it to the list and read the next one
![Page 58: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/58.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
Close the file when donereading from it
![Page 59: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/59.jpg)
graphType’s createGraph• createGraph function for the class graphType
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
Any Questions so far?
![Page 60: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/60.jpg)
Graded In-Class Activity: ICA 340
void graphType::createGraph(){ ifstream infile; char fileName[50]; int vertex; int adjacentVertex; if (gSize != 0) // if the graph is not empty, clearGraph(); // make it empty cout << "Enter input file name: "; cin >> fileName; cout << endl; infile.open(fileName); if (!infile) { cout << "Cannot open input file." << endl; return; }
infile >> gSize; //get the number of vertices for (int index = 0; index < gSize; index++) { infile >> vertex; infile >> adjacentVertex; while (adjacentVertex != -999) { graph[vertex].insertLast(adjacentVertex); infile >> adjacentVertex; } //end while } // end for infile.close();} //end createGraph
Create a text file that is formatted to work with the below code File should represent the graph shown
![Page 61: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/61.jpg)
Back to the class graphTypeclass graphType{public: graphType(int size = 0); //Constructor //Postcondition: gSize = 0; maxSize = size; // graph is an array of pointers to linked lists. ~graphType(); //Destructor //The storage occupied by the vertices is deallocated.
bool isEmpty() const; //Function to determine whether the graph is empty. //Postcondition: Returns true if the graph is empty; // otherwise, returns false. void createGraph(); //Function to create a graph. //Postcondition: The graph is created using the // adjacency list representation. void clearGraph(); //Function to clear graph. //Postcondition: The memory occupied by each vertex // is deallocated. void printGraph() const; //Function to print graph. //Postcondition: The graph is printed.
void depthFirstTraversal(); //Function to perform the depth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the depth first traversal algorithm.
void dftAtVertex(int vertex); //Function to perform the depth first traversal of //the graph at a node specified by the parameter vertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm. void breadthFirstTraversal(); //Function to perform the breadth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the breadth first traversal algorithm.private: int maxSize; //maximum number of vertices
int gSize; //current number of vertices
unorderedLinkedList<int> *graph; //array to create adjacency lists
void dft(int v, bool visited[]); //Function to perform the depth first traversal of the graph at a node //specified by the parameter vertex. This function is used by the public //member functions depthFirstTraversal and dftAtVertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm.};
Just saw this… so…
How do we print a graph?
![Page 62: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/62.jpg)
graphType’s printGraph• printGraph function for the class graphType
void graphType::printGraph() const{ for (int index = 0; index < gSize; index++) { cout << index << " "; graph[index].print(); cout << endl; } cout << endl;
} //end printGraph
![Page 63: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/63.jpg)
Back to the class graphTypeclass graphType{public: graphType(int size = 0); //Constructor //Postcondition: gSize = 0; maxSize = size; // graph is an array of pointers to linked lists. ~graphType(); //Destructor //The storage occupied by the vertices is deallocated.
bool isEmpty() const; //Function to determine whether the graph is empty. //Postcondition: Returns true if the graph is empty; // otherwise, returns false. void createGraph(); //Function to create a graph. //Postcondition: The graph is created using the // adjacency list representation. void clearGraph(); //Function to clear graph. //Postcondition: The memory occupied by each vertex // is deallocated. void printGraph() const; //Function to print graph. //Postcondition: The graph is printed.
void depthFirstTraversal(); //Function to perform the depth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the depth first traversal algorithm.
void dftAtVertex(int vertex); //Function to perform the depth first traversal of //the graph at a node specified by the parameter vertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm. void breadthFirstTraversal(); //Function to perform the breadth first traversal of the entire graph. //Postcondition: The vertices of the graph are printed // using the breadth first traversal algorithm.private: int maxSize; //maximum number of vertices
int gSize; //current number of vertices
unorderedLinkedList<int> *graph; //array to create adjacency lists
void dft(int v, bool visited[]); //Function to perform the depth first traversal of the graph at a node //specified by the parameter vertex. This function is used by the public //member functions depthFirstTraversal and dftAtVertex. //Postcondition: Starting at vertex, the vertices are // printed using the depth first traversal algorithm.};
This was rather straightforward…
What is this?
![Page 64: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/64.jpg)
Breadth-First Traversal: Visualize• Visually it goes like this
Start with A Discovered [ B, C ]Explore B
Discovered [ C, D, E ]Explore C
Discovered [ D, E, F, G ]Explore D
This being a binary tree is just a coincidence. The graph does NOT have to be a tree
![Page 65: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/65.jpg)
Breadth-First Traversal: Algorithm• for each vertex v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue is not empty
• Remove vertex u from the queue• Retrieve the vertices adjacent to u• for each vertex w that is adjacent to u
• if w is not visited
• Add w to the queue• Mark w as visited
![Page 66: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/66.jpg)
Breadth-First Traversal: C++ code• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
void graphType::breadthFirstTraversal(){ linkedQueueType<int> queue; bool *visited; visited = new bool[gSize]; for (int ind = 0; ind < gSize; ind++) visited[ind] = false; //initialize the array //visited to false linkedListIterator<int> graphIt; for (int index = 0; index < gSize; index++) if (!visited[index]) { queue.addQueue(index); visited[index] = true; cout << " " << index << " ";
while (!queue.isEmptyQueue()) { int u = queue.front(); queue.deleteQueue(); for (graphIt = graph[u].begin(); graphIt != graph[u].end(); ++graphIt) { int w = *graphIt; if (!visited[w]) { queue.addQueue(w); visited[w] = true; cout << " " << w << " "; } } } //end while } delete [] visited;} //end breadthFirstTraversal
![Page 67: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/67.jpg)
Breadth-First Traversal: C++ code• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
void graphType::breadthFirstTraversal(){ linkedQueueType<int> queue; bool *visited; visited = new bool[gSize]; for (int ind = 0; ind < gSize; ind++) visited[ind] = false; //initialize the array //visited to false linkedListIterator<int> graphIt; for (int index = 0; index < gSize; index++) if (!visited[index]) { queue.addQueue(index); visited[index] = true; cout << " " << index << " ";
while (!queue.isEmptyQueue()) { int u = queue.front(); queue.deleteQueue(); for (graphIt = graph[u].begin(); graphIt != graph[u].end(); ++graphIt) { int w = *graphIt; if (!visited[w]) { queue.addQueue(w); visited[w] = true; cout << " " << w << " "; } } } //end while } delete [] visited;} //end breadthFirstTraversal
![Page 68: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/68.jpg)
Breadth-First Traversal: C++ code• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
void graphType::breadthFirstTraversal(){ linkedQueueType<int> queue; bool *visited; visited = new bool[gSize]; for (int ind = 0; ind < gSize; ind++) visited[ind] = false; //initialize the array //visited to false linkedListIterator<int> graphIt; for (int index = 0; index < gSize; index++) if (!visited[index]) { queue.addQueue(index); visited[index] = true; cout << " " << index << " ";
while (!queue.isEmptyQueue()) { int u = queue.front(); queue.deleteQueue(); for (graphIt = graph[u].begin(); graphIt != graph[u].end(); ++graphIt) { int w = *graphIt; if (!visited[w]) { queue.addQueue(w); visited[w] = true; cout << " " << w << " "; } } } //end while } delete [] visited;} //end breadthFirstTraversal
![Page 69: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/69.jpg)
Breadth-First Traversal: C++ code• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
void graphType::breadthFirstTraversal(){ linkedQueueType<int> queue; bool *visited; visited = new bool[gSize]; for (int ind = 0; ind < gSize; ind++) visited[ind] = false; //initialize the array //visited to false linkedListIterator<int> graphIt; for (int index = 0; index < gSize; index++) if (!visited[index]) { queue.addQueue(index); visited[index] = true; cout << " " << index << " ";
while (!queue.isEmptyQueue()) { int u = queue.front(); queue.deleteQueue(); for (graphIt = graph[u].begin(); graphIt != graph[u].end(); ++graphIt) { int w = *graphIt; if (!visited[w]) { queue.addQueue(w); visited[w] = true; cout << " " << w << " "; } } } //end while } delete [] visited;} //end breadthFirstTraversal
![Page 70: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/70.jpg)
Breadth-First Traversal: C++ code• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
void graphType::breadthFirstTraversal(){ linkedQueueType<int> queue; bool *visited; visited = new bool[gSize]; for (int ind = 0; ind < gSize; ind++) visited[ind] = false; //initialize the array //visited to false linkedListIterator<int> graphIt; for (int index = 0; index < gSize; index++) if (!visited[index]) { queue.addQueue(index); visited[index] = true; cout << " " << index << " ";
while (!queue.isEmptyQueue()) { int u = queue.front(); queue.deleteQueue(); for (graphIt = graph[u].begin(); graphIt != graph[u].end(); ++graphIt) { int w = *graphIt; if (!visited[w]) { queue.addQueue(w); visited[w] = true; cout << " " << w << " "; } } } //end while } delete [] visited;} //end breadthFirstTraversal
![Page 71: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/71.jpg)
Breadth-First Traversal: C++ code• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
void graphType::breadthFirstTraversal(){ linkedQueueType<int> queue; bool *visited; visited = new bool[gSize]; for (int ind = 0; ind < gSize; ind++) visited[ind] = false; //initialize the array //visited to false linkedListIterator<int> graphIt; for (int index = 0; index < gSize; index++) if (!visited[index]) { queue.addQueue(index); visited[index] = true; cout << " " << index << " ";
while (!queue.isEmptyQueue()) { int u = queue.front(); queue.deleteQueue(); for (graphIt = graph[u].begin(); graphIt != graph[u].end(); ++graphIt) { int w = *graphIt; if (!visited[w]) { queue.addQueue(w); visited[w] = true; cout << " " << w << " "; } } } //end while } delete [] visited;} //end breadthFirstTraversal
![Page 72: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/72.jpg)
Breadth-First Traversal: C++ code• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
void graphType::breadthFirstTraversal(){ linkedQueueType<int> queue; bool *visited; visited = new bool[gSize]; for (int ind = 0; ind < gSize; ind++) visited[ind] = false; //initialize the array //visited to false linkedListIterator<int> graphIt; for (int index = 0; index < gSize; index++) if (!visited[index]) { queue.addQueue(index); visited[index] = true; cout << " " << index << " ";
while (!queue.isEmptyQueue()) { int u = queue.front(); queue.deleteQueue(); for (graphIt = graph[u].begin(); graphIt != graph[u].end(); ++graphIt) { int w = *graphIt; if (!visited[w]) { queue.addQueue(w); visited[w] = true; cout << " " << w << " "; } } } //end while } delete [] visited;} //end breadthFirstTraversal
![Page 73: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/73.jpg)
Breadth-First Traversal: C++ code• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
void graphType::breadthFirstTraversal(){ linkedQueueType<int> queue; bool *visited; visited = new bool[gSize]; for (int ind = 0; ind < gSize; ind++) visited[ind] = false; //initialize the array //visited to false linkedListIterator<int> graphIt; for (int index = 0; index < gSize; index++) if (!visited[index]) { queue.addQueue(index); visited[index] = true; cout << " " << index << " ";
while (!queue.isEmptyQueue()) { int u = queue.front(); queue.deleteQueue(); for (graphIt = graph[u].begin(); graphIt != graph[u].end(); ++graphIt) { int w = *graphIt; if (!visited[w]) { queue.addQueue(w); visited[w] = true; cout << " " << w << " "; } } } //end while } delete [] visited;} //end breadthFirstTraversal
![Page 74: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/74.jpg)
Marker Slide• Questions on:• Hashing• Graphs
• Definitions and Examples• Adjacency Matrix• Adjacency List• Operations and ADT
• Some code for reference
• Next• Graphs
• Breadth First Search (BFS) Example
![Page 75: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/75.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Graph before traversalAll vertices have been initialized as NOT visited
![Page 76: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/76.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 0: mark { A } as visited
Begin at vertex labeled A
![Page 77: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/77.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 0: Concludeswith vertex A being visited
![Page 78: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/78.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 1: discover neighbors of A aka explore A
![Page 79: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/79.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 1: mark neighbors of A as visited
![Page 80: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/80.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 1: Concludes with nodes B, E, F as explored
![Page 81: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/81.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 2: Explore B
![Page 82: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/82.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 2: Mark neighbors of B as visited
![Page 83: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/83.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 2: Explore E
![Page 84: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/84.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 2: Mark neighbors of E as visited
![Page 85: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/85.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 2: Explore F
![Page 86: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/86.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 2: Mark neighbors of F as visited
![Page 87: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/87.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 3: Concludeswith vertices C and I visited
![Page 88: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/88.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 3: Explore C
![Page 89: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/89.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 3: Mark neighbors of C as visited
![Page 90: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/90.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 3: Explore I
![Page 91: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/91.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 3: Mark neighbors of I as visited
![Page 92: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/92.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 3: Concludeswith vertices D, G, J, M, N visited
![Page 93: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/93.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Explore D
![Page 94: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/94.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Mark neighbors of D as visited
![Page 95: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/95.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Explore G
![Page 96: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/96.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Mark neighbors of G as visited
![Page 97: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/97.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Explore J
![Page 98: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/98.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Mark neighbors of J as visited
![Page 99: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/99.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Explore M
![Page 100: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/100.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Mark neighbors of M as visited
![Page 101: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/101.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Explore N
![Page 102: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/102.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Mark neighbors of N as visited
![Page 103: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/103.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 4: Concludeswith nodes H, K, L being visited
![Page 104: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/104.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 5: Explore H
![Page 105: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/105.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 5: Mark neighbors of H as visited
![Page 106: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/106.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 5: Explore K
![Page 107: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/107.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 5: Mark neighbors of K as visited
![Page 108: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/108.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 5: Explore L
![Page 109: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/109.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 5: Mark neighbors of L as visited
![Page 110: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/110.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 5: Concludeswith O and P being visited
![Page 111: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/111.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Level 6: Explores O and P and Concludes with no additional vertices visitedThe while loop, for loop and algorithm end
![Page 112: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/112.jpg)
Marker Slide• Questions on:• Hashing• Graphs
• Definitions and Examples• Adjacency Matrix• Adjacency List• Operations and ADT
• Some code for reference
• Breadth First Search (BFS) Example
• Next• Graphs
• Observations about BFS
![Page 113: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/113.jpg)
BFS: Why the ‘levels’ • Why might we want to keep track
of the “levels” (stuff in orange)A B C D
E F G H
I J K L
M N O P
Pause for student answer
![Page 114: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/114.jpg)
BFS: Why the ‘levels’ • Rearrange things to see why levels
were kept as BFS progressedA B C D
E F G H
I J K L
M N O P
A
BE F
Level 0
Level 1
![Page 115: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/115.jpg)
BFS: Why the ‘levels’ • Rearrange things to see why levels
were kept as BFS progressed
A
B
C D
E F G H
I J K L
M N O P
Level 0
Level 1
A
B
C
E F
I
Level 0
Level 1
Level 2
![Page 116: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/116.jpg)
BFS: Why the ‘levels’ • Rearrange things to see why levels
were kept as BFS progressed
A
B
C
D
E F G H
I
J K L
M N O P
Level 0
Level 1
Level 2
DGJM NLevel 3
![Page 117: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/117.jpg)
BFS: Why the ‘levels’ • Rearrange things to see why levels
were kept as BFS progressed
A
B
C
D
E F
G
H
I
J
K L
M N
O P
Level 0
Level 1
Level 2
Level 3
HK LLevel 4
![Page 118: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/118.jpg)
BFS: Why the ‘levels’ • Rearrange things to see why levels
were kept as BFS progressed
A
B
C
D
E F
G
H
I
J
K L
M N
O P
Level 0
Level 1
Level 2
Level 3
Level 4
O PLevel 5
![Page 119: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/119.jpg)
BFS: Why the ‘levels’ • Rearrange things to see why levels
were kept as BFS progressed
A
B
C
D
E F
G
H
I
J
K L
M N
O P
Level 0
Level 1
Level 2
Level 3
Level 4
Level 5
![Page 120: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/120.jpg)
BFS: Why the ‘levels’ • Rearrange things to see why levels
were kept as BFS progressed
A
B
C
D
E F
G
H
I
J
K L
M N
O P
Level 0
Level 1
Level 2
Level 3
Level 4
Level 5
A B C D
E F G H
I J K L
M N O P
![Page 121: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/121.jpg)
Marker Slide• Questions on:
• Hashing• Graphs
• Definitions and Examples• Adjacency Matrix• Adjacency List• Operations and ADT
• Some code for reference
• Breadth First Search (BFS) Example• Observations about BFS
• Why the levels
• Next• Graphs
• Observations about BFS• Why the starting for-loop?
![Page 122: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/122.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
A B C D
E F G H
I J K L
M N O P
Why have this for-loop?
The while loop covers everything.
Pause for student answer
![Page 123: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/123.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
Why have this for-loop?
The while loop covers everything.
A B C D
E F G H
I J K L
M N O P
In case stuff was not all connectedRemove some edges to see:
![Page 124: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/124.jpg)
Breadth-First Traversal: Example• for each vertex
v in the graph• if v is not visited
• add v to the queue• Mark v as visited• while the queue
is not empty• Remove vertex u
from the queue• Retrieve the vertices
adjacent to u• for each vertex w
that is adjacent to u• if w is
not visited• Add w to
the queue• Mark w as
visited
Why have this for-loop?
The while loop covers everything.
A B C D
E F G H
I J K L
M N O P
O and P would not get visitedif the for loop were not there
![Page 125: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/125.jpg)
Marker Slide• Questions on:
• Hashing• Graphs
• Definitions and Examples• Adjacency Matrix• Adjacency List• Operations and ADT
• Some code for reference
• Breadth First Search (BFS) Example• Observations about BFS
• Why the levels• Why the starting for-loop?
• Next• Study
![Page 126: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/126.jpg)
Start Studying• There should be an optional homework online• If not online today then very soon• Might help review for test• Can turn in it in if you want
• To drop box on D2L, before due date on drop box
• QUIZ 3 will also be coming online very soon• Probably already online• Due BEFORE Final Exam
• Next class is TEST REVIEW• Bring Questions
![Page 127: Graphs Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.](https://reader035.fdocuments.net/reader035/viewer/2022062519/5697c01c1a28abf838ccfca4/html5/thumbnails/127.jpg)
The End of This Part• End
ANY QUESTIONS ???
Is this thing on?