Graph Operations And
Representation
Sample Graph Problems
• Path problems.
• Connectedness problems.
• Spanning tree problems.
Path Finding
Path between 1 and 8.
2
4 3
8 8
1 6 10
2 4 5
4 4 3
5
9
11
5 6
6 7
7
Path length is 20.
Another Path Between 1 and 8
2
4 3
8 8
1 6 10
2 4 5
4 4 3
5
9
11
5 6
6 7
7
Path length is 28.
Example Of No Path
2
3
8
1 10
4
5
9
11
6
7
No path between 2 and 9.
Connected Graph
• Undirected graph.
• There is a path between every pair of
vertices.
Example Of Not Connected
2
3
8
1 10
4
5
9
11
6
7
Connected Graph Example
2
3
8
1 10
4
5
9
11
6
7
Connected Components
2
3
8
1 10
4
5
9
11
6
7
Connected Component
• A maximal subgraph that is connected.
Cannot add vertices and edges from original
graph and retain connectedness.
• A connected graph has exactly 1
component.
Not A Component
2
3
8
1 10
4
5
9
11
6
7
Communication Network
2
3
8
1 10
4
5
9
11
6
7
Each edge is a link that can be constructed (i.e., a feasible link).
Communication Network Problems
• Is the network connected?
Can we communicate between every pair of
cities?
• Find the components.
• Want to construct smallest number of
feasible links so that resulting network is
connected.
Cycles And Connectedness
2
3
8
1 10
4
5
9
11
6
7
Removal of an edge that is on a cycle does not affect
connectedness.
Cycles And Connectedness
2
3
8
1 10
4
5
9
11
6
7
Connected subgraph with all vertices and minimum number of
edges has no cycles.
Tree
• Connected graph that has no cycles.
• n vertex connected graph with n-1 edges.
Spanning Tree
• Subgraph that includes all vertices of the
original graph.
• Subgraph is a tree.
If original graph has n vertices, the spanning
tree has n vertices and n-1 edges.
Minimum Cost Spanning Tree
2
4 3
8 8
1 6 10
2 4 5
4 4 3
5
9
8 11
5 6
2
6 7
7
• Tree cost is sum of edge weights/costs.
A Spanning Tree
2
4 3
8 8
1 6 10
2 4 5
4 4 3
5
9
8 11
5 6
2
6 7
7
Spanning tree cost = 51.
Minimum Cost Spanning Tree
2
4 3
8 8
1 6 10
2 4 5
4 4 3
5
9
8 11
5 6
2
6 7
7
Spanning tree cost = 41.
A Wireless Broadcast Tree
2
4 3
8 8
1 6 10
2 4 5
4 4 3
5
9
8 11
5 6
2
6 7
7
Source = 1, weights = needed power.
Cost = 4 + 8 + 5 + 6 + 7 + 8 + 3 = 41.
Graph Representation
• Adjacency Matrix
• Adjacency Lists
Linked Adjacency Lists
Array Adjacency Lists
Adjacency Matrix
• 0/1 n x n matrix, where n = # of vertices
• A(i,j) = 1 iff (i,j) is an edge
1 2 3 4 5
2
3 1 0 1 0 1 0
2 1 0 0 0 1
1
3 0 0 0 0 1
4 4 1 0 0 0 1
5
5 0 1 1 1 0
Adjacency Matrix Properties
1 2 3 4 5
2
3 1 0 1 0 1 0
2 1 0 0 0 1
1
3 0 0 0 0 1
4 4 1 0 0 0 1
5
5 0 1 1 1 0
•Diagonal entries are zero.
•Adjacency matrix of an undirected graph is
symmetric.
A(i,j) = A(j,i) for all i and j.
Adjacency Matrix (Digraph)
1 2 3 4 5
2
3 1 0 0 0 1 0
2 1 0 0 0 1
1
3 0 0 0 0 0
4 4 0 0 0 0 1
5
5 0 1 1 0 0
•Diagonal entries are zero.
•Adjacency matrix of a digraph need not be
symmetric.
Adjacency Matrix
• n2 bits of space
• For an undirected graph, may store only
lower or upper triangle (exclude diagonal).
(n-1)n/2 bits
• O(n) time to find vertex degree and/or
vertices adjacent to a given vertex.
Adjacency Lists
• Adjacency list for vertex i is a linear list of vertices adjacent from vertex i.
• An array of n adjacency lists.
aList[1] = (2,4)
2 aList[2] = (1,5)
3
aList[3] = (5)
1
4
aList[4] = (5,1)
5
aList[5] = (2,4,3)
Linked Adjacency Lists
• Each adjacency list is a chain.
2 aList[1] 2 4
3
[2] 1 5
1 [3] 5
[4] 5 1
4
5 aList[5] 2 4 3
Array Length = n
# of chain nodes = 2e (undirected graph)
# of chain nodes = e (digraph)
Array Adjacency Lists
• Each adjacency list is an array list.
2 aList[1] 2 4
3
[2] 1 5
1 [3] 5
[4] 5 1
4
5 aList[5] 2 4 3
Array Length = n
# of list elements = 2e (undirected graph)
# of list elements = e (digraph)
Weighted Graphs
• Cost adjacency matrix.
C(i,j) = cost of edge (i,j)
• Adjacency lists => each list element is a
pair (adjacent vertex, edge weight)
Number Of Java Classes Needed
• Graph representations
Adjacency Matrix
Adjacency Lists
Linked Adjacency Lists
Array Adjacency Lists
3 representations
• Graph types
Directed and undirected.
Weighted and unweighted.
2 x 2 = 4 graph types
• 3 x 4 = 12 Java classes
Abstract Class Graph
package dataStructures;
import java.util.*;
public abstract class Graph
{
// ADT methods come here
// create an iterator for vertex i
public abstract Iterator iterator(int i);
// implementation independent methods come here
}
Abstract Methods Of Graph
// ADT methods
public abstract int vertices();
public abstract int edges();
public abstract boolean existsEdge(int i, int j);
public abstract void putEdge(Object theEdge);
public abstract void removeEdge(int i, int j);
public abstract int degree(int i);
public abstract int inDegree(int i);
public abstract int outDegree(int i);