CJamie

dijkstra

May 12th, 2022
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <unordered_set>
  3. using namespace std;
  4. #define V 5
  5. #define INF 100
  6. void dijkstra(vector<vector<int>> &graph, int n, int source)
  7. {
  8. int cost[V][V], distance[V];
  9. int count, nextnode;
  10. unordered_set<int> vis;
  11. for (int i = 0; i < n; i++)
  12. for (int j = 0; j < n; j++)
  13. if (graph[i][j] == 0)
  14. cost[i][j] = INF;
  15. else
  16. cost[i][j] = graph[i][j];
  17. for (int i = 0; i < n; i++)
  18. {
  19. distance[i] = cost[source][i];
  20. }
  21. distance[source] = 0;
  22. vis.insert(source);
  23. count = 1;
  24. while (count < n - 1)
  25. {
  26. int minDistance = INF;
  27. for (int i = 0; i < n; i++)
  28. if (distance[i] < minDistance && !vis.count(i))
  29. {
  30. minDistance = distance[i];
  31. nextnode = i;
  32. }
  33. vis.insert(nextnode);
  34. for (int i = 0; i < n; i++)
  35. if (!vis.count(i))
  36. if (minDistance + cost[nextnode][i] < distance[i])
  37. {
  38. distance[i] = minDistance + cost[nextnode][i];
  39. }
  40. count++;
  41. }
  42. cout << "source: " << source;
  43. for (int i = 0; i < n; i++)
  44. if (i != source)
  45. cout << "\nDistance of " << i << " from source: " << distance[i];
  46. }
  47.  
  48. int main()
  49. {
  50. 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}};
  51. int n = 5;
  52. int source = 0;
  53. dijkstra(graph, n, source);
  54. return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment