Pagini recente » Cod sursa (job #2710095) | Cod sursa (job #2887335) | Cod sursa (job #305755) | Cod sursa (job #680439) | Cod sursa (job #2088649)
#include <bits/stdc++.h>
using namespace std;
#define MAX 50010
#define inf 1000000000
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
class dijkstra
{
list<pair<int, int> > *arc;
int n;
public:
dijkstra(int n);
void drum(int s);
void adaugare(int x, int y, int c);
};
dijkstra::dijkstra(int n)
{
this->n=n+1;
arc=new list<pair<int,int> > [n+1];
}
void dijkstra::adaugare(int x, int y, int c)
{
arc[x].push_back({y,c});
}
void dijkstra::drum(int src)
{
priority_queue< pair<int,int> , vector< pair<int,int> >, greater< pair<int,int> > > pq;
vector<int> dist(n,inf);
dist[src]=0;
pq.push(make_pair(0,src));
while(pq.size())
{
int nod=pq.top().second;
pq.pop();
for(auto it : arc[nod])
if(dist[nod]+it.second < dist[it.first])
{
dist[it.first]=dist[nod]+it.second;
pq.push({dist[it.first], it.first});
}
}
for(int i=2;i<n;i++)
if(dist[i]!=inf) g<<dist[i]<<" ";
else g<<0<<" ";
g<<'\n';
}
int main()
{
int n,m,x,y,c;
f>>n>>m;
dijkstra grf(n);
for(int i=1;i<=m;i++)
{
f>>x>>y>>c;
grf.adaugare(x,y,c);
}
grf.drum(1);
return 0;
}