## Learning Outcomes

At the end of this lecture, you’ll be able to:

- Describe a variant of the general Graph Search problem that finds a
__path__between a source and every reachable vertex. - Modify BFS/DFS to find a path between a source and every reachable vertex.
- Describe a variant of the general Graph Search problem that finds the
__distance__between a source and every reachable vertex where distance is defined as the length of a path from source to that vertex. - Modify BFS/DFS to find the distance between a source and every reachable vertex where distance is the length of a path from source to that vertex.
- Trace
**shortest path algorithm**in__unweighted graph__by specifying the values in auxiliary data structures. - Analyze the running time of the (unweighted) shortest path algorithm, assuming an incidence/adjacency list Graph implementation.
- Recognize that (unweighted) shortest path algorithm is a modified BFS.
- Explain why the modified BFS will not find the shortest path in weighted graphs.
- Trace
**Dijkstra’s algorithm**(shortest path in__weighted graph__) by specifying the values in auxiliary data structures. - Analyze the running time of the Dijkstra’s algorithm, assuming an incidence/adjacency list Graph implementation.
- Describe the role of support data structures in reducing the running time of Dijkstra’s algorithm from quadratic to log-linear.
- Implement Dijkstra’s algorithm efficiently for application to a specific problem.

## Lecture Plan

In this lecture, we'll cover the following lessons:

- Graph Search Problem: Modify the Goal
- Modified Search Problem: Find Path⚡
- Modified Search Problem: Find Distance⚡
- Modified Search Problem: Directed Graph⚡
- Shortest Path: Unweighted Graph
- Shortest Path: Weighted Graph⚡
- Shortest Path: Dijkstra's Algorithm
- Dijkstra's Algorithm: Exercise⚡
- Dijkstra's Algorithm: Analysis⚡
- Shortest Path: Summary

Lessons marked with ⚡ contain exercise/activity.