PROGRAM-5
Aim:- Program to implement Dijkstra’s algorithm using greedy method.
Source Code:-
#include<bits/stdc++.h>
using namespace std;
class graph{
public:
unordered_map<char,vector<pair<char,int>>>adjList;
vector<pair<pair<char,char>,int>>edges;
vector<char>vertices;
void prepareAdjList(){
for(int i=0;i<[Link]();i++){
char u=edges[i].[Link];
char v=edges[i].[Link];
int w=edges[i].second;
adjList[u].push_back({v,w});
}
}
vector<int>dijkstra(int n,int source){
vector<int>dist(n,INT_MAX);
set<pair<int,int>>st;
dist[source]=0;
[Link]({0,source});
while(![Link]()){
auto top=*([Link]());
int nodeDistance=[Link];
int topNode=[Link];
[Link]([Link]());
for(auto neighbour:adjList[vertices[topNode]]){
if((nodeDistance+[Link])<dist[[Link]-vertices[0]]){
auto record=[Link]({dist[[Link]-vertices[0]],[Link]-
vertices[0]});
if(record!=[Link]()){
[Link](record);
}
dist[[Link]-vertices[0]]=nodeDistance+[Link];
[Link]({dist[[Link]-vertices[0]],[Link]-vertices[0]});
}
}
}
return dist;
}
};
int main(){
graph g;
int n;
cout<<"Enter no. of vertices: ";
cin>>n;
cout<<"Enter all vertices of directed graph(in lexicographically order): ";
for(int i=0;i<n;i++){
char v;
cin>>v;
[Link].push_back(v);
}
int m;
cout<<"Enter no. of edges: ";
cin>>m;
cout<<"Enter all edge pairof Directed graph with their weight: "<<endl;
for(int i=0;i<m;i++){
cout<<"Enter edge pair with weight: ";
char u,v;
int w;
cin>>u>>v>>w;
pair<pair<int,int>,int>p={{u,v},w};
[Link].push_back(p);
}
[Link]();
cout<<"Taking '"<<[Link][0]<<"' as a source node for Dijkstra algorithm"<<endl;
vector<int>res=[Link](n,0);
cout<<"Shortest distance of every vertices taking '"<<[Link][0]<<"' as a source
node:"<<endl;
for(int i=0;i<[Link]();i++){
cout<<[Link][0]<<"->"<<[Link][i]<<": "<<res[i]<<endl;
}
return 0;
}
OUTPUT:-