Mai intai trebuie sa te autentifici.
Cod sursa(job #1568776)
| Utilizator | Data | 14 ianuarie 2016 18:20:53 | |
|---|---|---|---|
| Problema | Algoritmul lui Dijkstra | Scor | 60 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.1 kb |
#include <cstdio>
#include <vector>
#include <queue>
#include <map>
#include <functional>
#include <climits>
using namespace std;
int N,M;
map<int,vector<int> >graf;
map<pair<int,int>,int> cost;
void dijkstra(int stop)
{
map<int,int>a;
for(int i=2;i<=N;i++)
a[i]=INT_MAX;
a[1]=0;
priority_queue<int,vector<int>,greater<int> >q;
q.push(1);
while(!q.empty())
{
int nod=q.top();
q.pop();
for(int i=0;i<graf[nod].size();i++)
{
int v=graf[nod][i];
if(a[nod]+cost[make_pair(nod,v)]<a[v])
{
a[v]=a[nod]+cost[make_pair(nod,v)];
q.push(v);
}
}
}
for(int i=2;i<=N;i++)
if(a[i]==INT_MAX)
printf("0 ");
else printf("%d ",a[i]);
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d",&N,&M);
for(int i=0;i<M;i++)
{
int from,to,c;
scanf("%d %d %d",&from,&to,&c);
graf[from].push_back(to);
cost[make_pair(from,to)]=c;
}
dijkstra(2);
return 0;
}
