Graphs
Some Examples and Terminology A graph is a set of vertices (nodes) and a set of edges (arcs) such that each edge is associated with exactly two vertices Edges can be undirected or directed (digraph) A subgraph is a portion of a graph that itself is a graph
A portion of a road map treated as a graph Nodes Edges A portion of a road map treated as a graph
A directed graph representing part of a city street map
(a) A maze; (b) its representation as a graph
The prerequisite structure for a selection of courses as a directed graph without cycles.
Paths A sequence of edges that connect two vertices in a graph In a directed graph the direction of the edges must be considered Called a directed path A cycle is a path that begins and ends at same vertex and does not pass through any vertex more than once A graph with no cycles is acyclic
Weights A weighted graph has values on its edges Weights, costs, etc. A path in a weighted graph also has weight or cost The sum of the edge weights Examples of weights Miles between nodes on a map Driving time between nodes Taxi cost between node locations
A weighted graph
Connected Graphs A connected graph A complete graph Has a path between every pair of distinct vertices A complete graph Has an edge between every pair of distinct vertices A disconnected graph Not connected
Connected Graphs Undirected graphs
Vertex A is adjacent to B, but B is not adjacent to A. Adjacent Vertices Two vertices are adjacent in an undirected graph if they are joined by an edge Sometimes adjacent vertices are called neighbors Vertex A is adjacent to B, but B is not adjacent to A.
Note the graph with two subgraphs Each subgraph connected Entire graph disconnected Airline routes
Trees All trees are graphs A tree is a connected graph without cycles But not all graphs are trees A tree is a connected graph without cycles Traversals Preorder (and, technically, inorder and postorder) traversals are examples of depth-first traversal Level-order traversal of a tree is an example of breadth-first traversal Visit a node Process the node’s data and/or mark the node as visited
Trees Visitation order of two traversals; (a) depth first; (b) breadth first.
Depth-First Traversal Visits a vertex, then A neighbor of the vertex, A neighbor of the neighbor, Etc. Advance as far as possible from the original vertex Then back up by one vertex Considers the next neighbor
Algorithm depthFirstTraversal (originVertex) traversalOrder = a new queue for the resulting traversal order vertexStack = a new stack to hold vertices as they are visited Mark originVertex as visited traversalOrder.enqueue (originVertex) vertexStack.push (originVertex) while (!vertexStack.isEmpty ()) { topVertex = vertexStack.peek () if (topVertex has an unvisited neighbor) { nextNeighbor = next unvisited neighbor of topVertex Mark nextNeighbor as visited traversalOrder.enqueue (nextNeighbor) vertexStack.push (nextNeighbor) } else // all neighbors are visited vertexStack.pop () return traversalOrder
Depth-First Traversal Trace of a depth-first traversal beginning at vertex A. Assumes that children are placed on the stack in reverse alphabetic (or numeric order).
Breadth-First Traversal Algorithm for breadth-first traversal of nonempty graph beginning at a given vertex Algorithm breadthFirstTraversal(originVertex) vertexQueue = a new queue to hold neighbors traversalOrder = a new queue for the resulting traversal order Mark originVertex as visited traversalOrder.enqueue(originVertex) vertexQueue.enqueue(originVertex) while (!vertexQueue.isEmpty()) { frontVertex = vertexQueue.dequeue() while (frontVertex has an unvisited neighbor) { nextNeighbor = next unvisited neighbor of frontVertex Mark nextNeighbor as visited traversalOrder.enqueue(nextNeighbor) vertexQueue.enqueue(nextNeighbor) } } return traversalOrder A breadth-first traversal visits a vertex and then each of the vertex's neighbors before advancing
Breadth-First Traversal A trace of a breadth-first traversal for a directed graph, beginning at vertex A. Assumes that children are placed in the queue in alphabetic (or numeric order).
Implementations of the ADT Graph B C D 1 A directed graph and implementations using adjacency lists and an adjacency matrix.
Topological Order Given a directed graph without cycles In a topological order Vertex a precedes vertex b whenever a directed edge exists from a to b
Topological Order Three topological orders for the indicated graph.
Topological Order An impossible prerequisite structure for three courses as a directed graph with a cycle.
Topological Order Algorithm for a topological sort Algorithm getTopologicalSort() vertexStack = a new stack to hold vertices as they are visited n = number of vertices in the graph for (counter = 1 to n) { nextVertex = an unvisited vertex having no unvisited successors Mark nextVertex as visited stack.push(nextVertex) } return stack
Topological Sorting Algorithm getTopologicalSort() vertexStack = a new stack to hold vertices as they are visited n = number of vertices in the graph for (counter = 1 to n) { nextVertex = an unvisited vertex having no unvisited successors Mark nextVertex as visited stack.push(nextVertex) } return stack
Finding a topological order
Shortest Path in an Unweighted Graph (a) an unweighted graph and (b) the possible paths from vertex A to vertex H.
Shortest Path in an Unweighted Graph The previous graph after the shortest-path algorithm has traversed from vertex A to vertex H
Shortest Path in an Unweighted Graph Finding the shortest path from vertex A to vertex H.
Shortest Path in an Weighted Graph (a) A weighted graph and (b) the possible paths from vertex A to vertex H.
Shortest Path in an Weighted Graph Shortest path between two given vertices Smallest edge-weight sum Algorithm based on breadth-first traversal Several paths in a weighted graph might have same minimum edge-weight sum Algorithm given by text finds only one of these paths
Shortest Path in an Weighted Graph Finding the shortest path from vertex A to vertex H
Shortest Path in an Weighted Graph The previous graph after finding the shortest path from vertex A to vertex H.
Java Interfaces for the ADT Graph Methods in the BasicGraphInterface addVertex addEdge hasEdge isEmpty getNumberOfVertices getNumberOfEdges clear