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 2 Nodes Edges A portion of a road map treated as a graph 3 A directed graph representing part of a city street map 4 (a) A maze; (b) its representation as a graph 5 The prerequisite structure for a selection of courses as a directed graph without cycles. 6 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 7 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 8 A weighted graph 9 Connected Graphs A connected 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 10 Connected Graphs Undirected graphs 11 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. 12 Note the graph with two subgraphs • Each subgraph connected • Entire graph disconnected Airline routes 13 Trees All trees are graphs • 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 depthfirst 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 14 Trees Visitation order of two traversals; (a) depth first; (b) breadth first. 15 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 16 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 17 Depth-First Traversal Trace of a depth-first traversal beginning at vertex A. Assumes that children are placed on the stack in alphabetic (or numeric order). 18 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 A breadth-first traversal visits traversalOrder.enqueue(originVertex) a vertex and then each of the vertexQueue.enqueue(originVertex) vertex's neighbors before while (!vertexQueue.isEmpty()) { advancing 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) } } 19 return traversalOrder 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). 20 Implementations of the ADT Graph A B C D A 0 1 1 1 B 0 0 0 0 C 0 0 0 0 D 1 0 1 0 A directed graph and implementations using adjacency lists and an adjacency matrix. 21 22 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 23 Topological Order Three topological orders for the indicated graph. 24 Topological Order An impossible prerequisite structure for three courses as a directed graph with a cycle. 25 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 26 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 27 Topological Order Finding a topological order 28 Shortest Path in an Unweighted Graph (a) an unweighted graph and (b) the possible paths from vertex A to vertex H. 29 Shortest Path in an Unweighted Graph The previous graph after the shortest-path algorithm has traversed from vertex A to vertex H 30 Shortest Path in an Unweighted Graph Finding the shortest path from vertex A to vertex H. 31 Shortest Path in an Weighted Graph (a) A weighted graph and (b) the possible paths from vertex A to vertex H. 32 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 33 Shortest Path in an Weighted Graph Finding the shortest path from vertex A to vertex H 34 Shortest Path in an Weighted Graph The previous graph after finding the shortest path from vertex A to vertex H. 35 Java Interfaces for the ADT Graph Methods in the BasicGraphInterface • addVertex • addEdge • hasEdge • isEmpty • getNumberOfVertices • getNumberOfEdges • clear 36