-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdjikstra_algorithm.cpp
More file actions
46 lines (46 loc) · 1.14 KB
/
Copy pathdjikstra_algorithm.cpp
File metadata and controls
46 lines (46 loc) · 1.14 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
35
36
37
38
39
40
41
42
43
44
45
46
#include<bits/stdc++.h>
#define ff first
#define ss second
using namespace std;
vector<pair<int,int> > vecto[100];
int distanc[100];
void dijkstra(int start_point)
{
distanc[start_point]=0;
priority_queue<pair<int,int> > que;
que.push({start_point,0});
while(!que.empty())
{
pair<int,int> pa=que.top();
que.pop();
if(pa.ss>distanc[pa.ff])
continue;
for(int i=0;i<vecto[pa.ff].size();i++)
{
int alt=distanc[pa.ff]+vecto[pa.ff][i].ss;
if(alt<distanc[vecto[pa.ff][i].ff])
que.push({vecto[pa.ff][i].ff,distanc[vecto[pa.ff][i].ff]=alt});
}
}
}
int main()
{
int nodes,edges,x,y,start_point,dis;
cin>>nodes>>edges;
for(int i=0;i<100;i++)
{
vecto[i].clear();
distanc[i]=INT_MAX;
}
for(int i=0;i<edges;i++)
{
cin>>x>>y>>dis;
vecto[x].push_back(make_pair(y,dis));
vecto[y].push_back(make_pair(x,dis));
}
cin>>start_point;
dijkstra(start_point);
for(int i=0;i<nodes;i++)
cout<<i<<" "<<distanc[i]<<endl;
return 0;
}