Introduction One of the Most versatile data structures like trees. Terminology –Nodes in trees are vertices in graphs. –Lines connecting vertices are edges. –Each edge is bounded by two vertices at its ends. –Two vertices are said to be adjacent to one another if they are connected by a single edge.
Introduction (Terminology) Vertices adjacent to a given vertex are called its neighbors. A path is a sequence of edges. A graph is said to be connected if there is at least one path from every vertex to every other vertex. A non-connected graph consists of several connected components.
Connected vs Non- connected graph Connected graph Non-Connected graph
Directed and Weighted Graphs Undirected graphs - edges don’t have a direction. –Can travel in any direction. Directed graphs – can traverse in only the indicated direction. Weight – number that represents physical distance or time or cost between two vertices.
Representing Graphs Vertices can be represented by a vertex class (i.e.similar to node or link in LL). Vertex objects can be placed in –an array, –list or –other data structure. Graphs can be represented using adjacency matrix or adjacency list.
Representing Graphs 1.Adjacency matrix – 2-dimensional array in which elements indicate whether an edge is present between two vertices. –Edge is represented by 1. –Or Edge is represented by weight 2.Adjacency List – array of lists or list of lists. –Each individual list shows what vertices a given vertex is adjacent to.
Search Fundamental operation, to find out which vertices can be reached from a specified vertex. An algorithm that provides a systematic way to start at a specified vertex and then move along edges to other vertex. Every vertex that is connected to this vertex has to be visited at the end. Two common approaches : –depth-first (DFS) and –breadth-first search (BFS).
DFS Can be implemented with a stack to remember where it should go when it reaches a dead end. DFS goes far way from the starting point as quickly as possible and returns only if it reaches a dead end. Used in simulations of games
DFS There are 3 rules -- start with a vertex R1 a. go to any vertex adjacent to it that hasn’t yet been visited b. push it on a stack and mark it R2 if can’t follow R1, then possible pop up a vertex off the stack R3 if can’t follow R1 and R2, you’re done
DFS Steps: -- start with a vertex -- visit it -- push it on a stack and mark it -- go to any vertex adjacent to it that hasn’t yet been visited -- if there are no unvisited nodes, pop a vertex off the stack till you come across a vertex that has unvisited adjacent vertices
Breadth-First Search BFS Implemented with a queue. Stays as close as possible to the starting point. Visits all the vertices adjacent to the starting vertex
BFS Steps: -- start with visiting a starting vertex -- visit the next unvisited adjacent vertex, mark it and insert it into the queue. -- if there are no unvisited vertices, remove a vertex from the queue and make it the current vertex. -- continue until you reach the end.