-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDijkstrasAlgorithm.cpp
More file actions
34 lines (30 loc) · 1.08 KB
/
Copy pathDijkstrasAlgorithm.cpp
File metadata and controls
34 lines (30 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Q165 https://www.codingninjas.com/codestudio/problems/920469?topList=striver-sde-sheet-problems&utm_source=striver&utm_medium=website
// Time: O((N+E)*LoG(N))
// Space: O(N+E) + O(N) + O(N)
#include<bits/stdc++.h>
vector<int> dijkstra(vector<vector<int>> &edge, int v, int e, int src) {
vector<pair<int,int>> adj[v];
for(int i=0;i<e;i++){
adj[edge[i][0]].push_back(make_pair(edge[i][1],edge[i][2]));
adj[edge[i][1]].push_back(make_pair(edge[i][0],edge[i][2]));
}
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
vector<int> dist(v,INT_MAX);
dist[src]=0;
q.push(make_pair(0,src));
while(!q.empty()){
int dis=q.top().first;
int prev=q.top().second;
q.pop();
// vector<pair<int,int>> :: iterator it;
for(auto it:adj[prev]){
int next=it.first;
int nextdist=it.second;
if(dist[next]>dis+nextdist){
dist[next]=dis+nextdist;
q.push(make_pair(dist[next],next));
}
}
}
return dist;
}