Pagini recente » Cod sursa (job #2324236) | Cod sursa (job #3178492) | Cod sursa (job #2398015) | Cod sursa (job #2453865) | Cod sursa (job #2200558)
#include <stdio.h>
#include <stdlib.h>
int nr_noduri;
int nr_arcuri;
int cost[1001][1001];
int dist[1001];
int tata[1001];
int vis[1001];
int main()
{
FILE *f1 = fopen("dijkstra.in", "r");
FILE *f2 = fopen("dijkstra.out", "w");
int i, nod, vecin, nod1, nod2, val_cost;
fscanf(f1, "%d%d", &nr_noduri, &nr_arcuri);
for (nod1 = 1; nod1 <= nr_noduri; nod1++)
for (nod2 = 1; nod2 <= nr_noduri; nod2++)
cost[nod1][nod2] = 999999999;
for (i = 0; i < nr_arcuri; i++)
{
fscanf(f1, "%d%d%d", &nod1, &nod2, &val_cost);
cost[nod1][nod2] = val_cost;
//cost[nod2][nod1] = val_cost;
}
for (i = 1; i <= nr_noduri; i++)
{
dist[i] = 999999999;
}
dist[1] = 0;
for (i = 1; i <= nr_noduri; i++)
{
int dist_min = 999999999;
int nod_min = 0;
for (nod = 1; nod <= nr_noduri; nod++)
{
if (vis[nod] == 0 && dist[nod] < dist_min)
{
dist_min = dist[nod];
nod_min = nod;
}
}
if (dist_min == 999999999)
break;
vis[nod_min] = 1;
for (vecin = 1; vecin <= nr_noduri; vecin++)
{
if (vis[vecin] == 0 && cost[nod_min][vecin] != 999999999)
{
if (dist[vecin] > dist[nod_min] + cost[nod_min][vecin])
{
dist[vecin] = dist[nod_min] + cost[nod_min][vecin];
}
}
}
}
for (nod = 2; nod <= nr_noduri; nod++)
{
if (dist[nod] == 999999999)
dist[nod] = 0;
fprintf(f2, "%d ", dist[nod]);
}
}