CSCE 3110 Data Structures & Algorithm Analysis: Rada Mihalcea Graphs (I) Reading: Chap.9, Weiss
CSCE 3110 Data Structures & Algorithm Analysis: Rada Mihalcea Graphs (I) Reading: Chap.9, Weiss
Rada Mihalcea
http://www.cs.unt.edu/~rada/CSCE3110
Graphs (I)
Reading: Chap.9, Weiss
What is a Graph?
a b V= {a,b,c,d,e}
E= {(a,b),(a,c),
c (a,d),
(b,e),(c,d),(c,e),
(d,e)}
d e
Applications
CS16
electronic circuits
JFK
LAX STL
HNL
DFW
FTL
Terminology:
Adjacent and Incident
If (v0, v1) is an edge in an undirected graph,
v0 and v1 are adjacent
The edge (v0, v1) is incident on vertices v0 and v1
If <v0, v1> is an edge in a directed graph
v0 is adjacent to v1, and v1 is adjacent from v0
The edge <v0, v1> is incident on v0 and v1
Terminology:
Degree of a Vertex
The degree of a vertex is the number of edges
incident to that vertex
For directed graph,
the in-degree of a vertex v is the number of edges
that have v as the head
the out-degree of a vertex v is the number of edges
that have v as the tail
if di is the degree of a vertex i in a graph G with n
vertices and e edges, the number of edges is
n 1
d )/ 2
Why? Since adjacent vertices each
e( i count the adjoining edge, it will be
0
counted twice
Examples
0
3 2
0 1 2
3 3
3 1 2 3 3 4 5 6
3G1 1 1 G2 1 1
3
0 in:1, out: 1
directed graph
in-degree
out-degree 1 in: 1, out: 2
2 in: 1, out: 0
G3
Terminology:
Path
path: sequence of
3 2
vertices v1,v2,. . .vk such
that consecutive
vertices vi and vi+1 are 3
adjacent.
3 3
a b a b
c c
d e d e
abedc bedc
7
More Terminology
simple path: no repeated vertices
a b
bec
c
d e
cycle: simple path, except that the last vertex is the same as
the first vertex
a b
acda
c
d e
Even More Terminology
1 1 1 1
2 2 2
(i) (ii) (iii) (iv)
(b) Some of the subgraph of G3
G3
More…
tree
tree
forest
tree
tree
Connectivity
Let n = #vertices, and m = #edges
A complete graph: one in which all pairs of vertices
are adjacent
How many total edges in a complete graph?
Each of the n vertices is incident to n-1 edges, however, we
would have counted each edge twice! Therefore, intuitively, m
= n(n -1)/2.
Therefore, if a graph is not complete, m < n(n -1)/2
n 5
m (5
More Connectivity
n = #vertices
n5
m = #edges m4
For a tree m = n - 1
If m < n - 1, G is
not connected
n5
m3
Oriented (Directed) Graph
A graph where edges are directed
Directed vs. Undirected Graph
An undirected graph is one in which the pair
of vertices in a edge is unordered, (v0, v1) =
(v1,v0)
A directed graph is one in which each edge is
a directed pair of vertices, <v0, v1> != <v1,v0>
tail head
ADT for Graph
objects: a nonempty set of vertices and a set of undirected edges, where each
edge is a pair of vertices
functions: for all graph Graph, v, v1 and v2 Vertices
Graph Create()::=return an empty graph
Graph InsertVertex(graph, v)::= return a graph with v inserted. v has no
incident edge.
Graph InsertEdge(graph, v1,v2)::= return a graph with new edge
between v1 and v2
Graph DeleteVertex(graph, v)::= return a graph in which v and all edges
incident to it are removed
Graph DeleteEdge(graph, v1, v2)::=return a graph in which the edge (v1, v2)
is removed
Boolean IsEmpty(graph)::= if (graph==empty graph) return TRUE
else return FALSE
List Adjacent(graph,v)::= return a list of all vertices that are adjacent to v
Graph Representations
Adjacency Matrix
Adjacency Lists
Adjacency Matrix
#define MAX_VERTICES 50
typedef struct node *node_pointer;
typedef struct node {
int vertex;
struct node *link;
};
node_pointer graph[MAX_VERTICES];
int n=0; /* vertices currently in use */
0 0 4
2 1 5
1 2 3 6
3 7
0 1 2 3 0 1 2
1 0 2 3 1 0 3
2 0 1 3 2 0 3
3 0 1 2 3 1 2
G1 0 4 5
5 4 6
0 1 6 5 7
1 0 2 1
7 6
2
G3 G4
2
An undirected graph with n vertices and e edges ==> n head nodes and 2e list nodes
Some Operations
degree of a vertex in an undirected graph
–# of nodes in adjacency list
# of edges in a graph
–determined in O(n+e)
out-degree of a vertex in a directed graph
–# of nodes in its adjacency list
in-degree of a vertex in a directed graph
–traverse the whole data structure
Graph Traversal
Problem: Search for a certain node or traverse
all nodes in the graph
Depth First Search
Once a possible path is found, continue the search
until the end of the path
Breadth First Search
Start several paths at a time, and advance in each
one step at a time
Depth-First Search
A B C D
E F G H
I J K L
M N O P
Exploring a Labyrinth
Without Getting Lost
A depth-first search (DFS) in an undirected graph G is like
wandering in a labyrinth with a string and a can of red paint
without getting lost.
We start at vertex s, tying the end of our string to the point and
painting s “visited”. Next we label s as our current vertex called
u.
Now we travel along an arbitrary edge (u, v).
If edge (u, v) leads us to an already visited vertex v we return to
u.
If vertex v is unvisited, we unroll our string and move to v, paint
v “visited”, set v as our current vertex, and repeat the previous
steps.
Depth-First Search
28
BFS - A Graphical
Representation
0 0 1
A B C D A B C D
a) E F G H E F G H b)
I J K L I J K L
M N O P M N O P
0 1 2
0 1 2 3
A B C D B C D
A
c) d)
E F G H E F G H
I J K L
I J K L
M N O P
M N O P
29
More BFS
0 1 2 3 0 1 2 3
A B C D A B C D
E F G H E F G H
4 4
I J K L I J K L
M N O P M N O P 5
BFS Pseudo-Code
31
Applications: Finding a Path
F B A start
DFS Process E
G D C
destination
F B A start
E
BFS Process
G D C
destination
A B D C D
Initial call to BFS on A Dequeue A Dequeue B Dequeue C
Add A to queue Add B Add C, D Nothing to add
rear front