Pagini recente » Cod sursa (job #995027) | Cod sursa (job #3189802) | Cod sursa (job #2382346) | Cod sursa (job #1888315) | Cod sursa (job #876809)
Cod sursa(job #876809)
#include <cstdio>
#include <vector>
#define lim 50001
#define oo (1<<30)-1
#include <queue>
using namespace std;
FILE *inFile = fopen("dijkstra.in","r");
FILE *outFile = fopen("dijkstra.out","w");
int n,m;
struct nod
{
int vf,cost;
};
int cost[lim];
bool viz[lim];
struct cmp
{
bool operator()(int &x, int &y)const
{
return cost[x] > cost[y];
}
};
priority_queue<int,vector<int>,cmp> Q;
vector<nod>graf[lim];
void citire()
{
fscanf(inFile,"%d %d",&n,&m);
for(int i =0 ; i < m ; i++)
{
int x,y,c;
fscanf(inFile,"%d %d %d",&x,&y,&c);
nod K;
K.vf = y;
K.cost = c;
graf[x].push_back(K);
}
}
void initialize(int start)
{
for(int i = 1; i <= n; i++)
{
cost[i] = oo;
viz[i] = false;
}
cost[start] = 0;
}
void dijkstra(int start)
{
Q.push(start);
viz[start] = true;
while (!Q.empty())
{
int min = Q.top();
Q.pop();
for(int i = 0; i < graf[min].size();i++)
{
if(viz[graf[min][i].vf] == false)
if(cost[min] + graf[min][i].cost < cost[graf[min][i].vf])
{
cost[graf[min][i].vf] = cost[min] + graf[min][i].cost;
Q.push(graf[min][i].vf);
}
}
viz[start] = true;
}
for(int i = 0 ; i <= n; i++)
if(cost[i] == oo)
cost[i] =0;
}
int main()
{
citire();
initialize(1);
dijkstra(1);
for(int i =2; i <=n; i++)
{
fprintf(outFile,"%d ",cost[i]);
}
return 0;
}