Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<cstdio>
- #include<vector>
- #include<queue>
- #include<cstdlib>
- #define INF 2147483647 // 2^31 - 1
- using namespace std;
- void Dijkstra_BFS_weighted_directed(vector<vector<pair<int,int>>> gr, int src)
- {
- int distance[gr.size()] ;// keeps shortest distance from source to node
- fill_n(distance, gr.size(), INF);
- distance[src] = 0;
- priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> q;// using priority queue will reduce complexity
- q.push(make_pair(distance[src], src));
- while(!q.empty())
- {
- int u=q.top().second;
- q.pop();
- for(int i=0; i<gr[u].size(); i++)
- {
- int v = gr[u][i].first;
- int cost_of_uv = gr[u][i].second;
- if(distance[u]+cost_of_uv < distance[v])
- {
- distance[v] = distance[u]+cost_of_uv;
- q.push(make_pair(distance[v],v));
- }
- }
- }
- // printing distance of all nodes
- printf("Distance from src=%d to...\n", src);
- for(int i=1; i< gr.size(); i++){
- printf("%d: %d\n", i, distance[i]);
- }
- }
- int main()
- {
- int n, e;
- scanf("%d %d", &n, &e);
- vector<vector<pair<int,int>>> gr;//
- gr.clear();
- gr.resize(n+1);
- // taking input for directed-weighted graph
- for(int i=0; i<e; i++)
- {
- int u,v,w;
- scanf("%d %d %d", &u, &v, &w);
- gr[u].push_back(make_pair(v,w));
- //gr[v].push_back(make_pair(u,w));
- }
- Dijkstra_BFS_weighted_directed(gr, 4);
- //printing list
- // for(int i=1; i<gr.size(); i++){
- // printf("%d: ", i);
- // for(int j=0; j<gr[i].size(); j++){
- // printf("->%d( %d )", gr[i][j].first, gr[i][j].second);
- // }
- // printf("\n");
- // }
- }
Add Comment
Please, Sign In to add comment