Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <unordered_set>
- using namespace std;
- #define V 5
- #define INF 100
- void dijkstra(vector<vector<int>> &graph, int n, int source)
- {
- int cost[V][V], distance[V];
- int count, nextnode;
- unordered_set<int> vis;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- if (graph[i][j] == 0)
- cost[i][j] = INF;
- else
- cost[i][j] = graph[i][j];
- for (int i = 0; i < n; i++)
- {
- distance[i] = cost[source][i];
- }
- distance[source] = 0;
- vis.insert(source);
- count = 1;
- while (count < n - 1)
- {
- int minDistance = INF;
- for (int i = 0; i < n; i++)
- if (distance[i] < minDistance && !vis.count(i))
- {
- minDistance = distance[i];
- nextnode = i;
- }
- vis.insert(nextnode);
- for (int i = 0; i < n; i++)
- if (!vis.count(i))
- if (minDistance + cost[nextnode][i] < distance[i])
- {
- distance[i] = minDistance + cost[nextnode][i];
- }
- count++;
- }
- cout << "source: " << source;
- for (int i = 0; i < n; i++)
- if (i != source)
- cout << "\nDistance of " << i << " from source: " << distance[i];
- }
- int main()
- {
- vector<vector<int>> graph{{0, 1, 0, 3, 10}, {1, 0, 5, 0, 0}, {0, 5, 0, 2, 1}, {3, 0, 2, 0, 6}, {10, 0, 1, 6, 0}};
- int n = 5;
- int source = 0;
- dijkstra(graph, n, source);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment