Single Source Shortest Path (Dijkstra Algorithm) |
A shortest path algorithm used to find the shortest path between two nodes in a graph. It works by maintaining a priority queue of unvisited nodes and their tentative distances from a source node. Starting from the source node, it visits the neighboring nodes and updates their tentative distances if a shorter path is found. This process is repeated until all nodes have been visited. (Note: It only works for non-negative weights)
Time Complexity: O((n+m)log(n)) with prioirty queues, O(n²) without
int getMinimumUnvisited(vector<bool> &visited, vector<int> &distances)
{
int minimumIndex = 0;
int minDistance = INT_MAX;
for (int i = 0; i < distances.size(); i++)
{
if (distances.at(i) < minDistance && !visited.at(i))
{
minimumIndex = i;
minDistance = distances.at(i);
}
}
return minimumIndex;
}
vector<int> dijkstra(vector<vector<int>> &graph, int starting)
{
vector<bool> visited;
visited.resize(graph.size(), false);
vector<int> distances;
distances.resize(graph.size(), INT_MAX);
distances.at(starting) = 0;
for (int i = 0; i < graph.size(); i++)
{
int current = getMinimumUnvisited(visited, distances);
visited.at(current) = true;
for (int j = 0; j < graph.at(0).size(); j++)
{
if (graph.at(i).at(j) != 0 && !visited.at(j))
{
distances.at(j) = min(distances.at(j), distances.at(i) + graph.at(i).at(j));
}
}
}
return distances;
}