Pagini recente » Cod sursa (job #2636619) | Cod sursa (job #2074168) | Cod sursa (job #758165) | Cod sursa (job #1604097) | Cod sursa (job #276130)
Cod sursa(job #276130)
#include <fstream>
#include <cstring>
using namespace std;
struct Nod { Nod *n; unsigned int dest,cost; };
#define INF 0xeeeeeeee
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
unsigned int N,M;
Nod *graf[50001];
int main ()
{
in >> N >> M;
for (unsigned int i=0; i<M; ++i) {
unsigned int src,dest,cost;
in >> src >> dest >> cost;
Nod *nod = new Nod;
nod->dest = dest;
nod->cost = cost;
nod->n = graf[src];
graf[src] = nod;
}
in.close();
unsigned int dist[50001];
char visited[50001]; memset(visited, 0, N+1);
dist[1] = 0;
for (unsigned int i=2; i<=N; ++i) dist[i]=INF;
unsigned int crt=1;
while (crt != INF) {
visited[crt] = 1;
for (Nod *nod=graf[crt]; nod; nod=nod->n)
if (dist[nod->dest] > dist[crt]+nod->cost) dist[nod->dest] = dist[crt]+nod->cost;
unsigned int min=INF,minvf=INF;
for (unsigned int i=2; i<=N; ++i) if (!visited[i] && dist[i] < min) { min=dist[i];minvf=i; }
crt = minvf;
}
for (unsigned int i=2; i<=N; ++i) out << ((dist[i]==INF)?0:dist[i]) << ' ';
out << '\n';
out.close();
return 0;
}