Pagini recente » Cod sursa (job #1633779) | Cod sursa (job #2358880) | Cod sursa (job #1697706) | Cod sursa (job #939747) | Cod sursa (job #1267690)
#include <cstdio>
#include <vector>
#define NMAX 100
#define INF 1000
using namespace std;
struct Vecin
{
int vf;
int cost;
};
vector <Vecin> G[NMAX];
int n, x0=1;
int cmin[NMAX], prec[NMAX];
int Z[NMAX];
void citire();
void Dijkstra();
void afisare();
int main()
{
citire();
Dijkstra();
afisare();
return 0;
}
void citire()
{
int m, i, x;
struct Vecin aux;
FILE*fin=fopen ("dijkstra.in", "r");
fscanf(fin, "%d %d", &n, &m);
for (i=1; i<=m; ++i)
{
fscanf(fin, "%d %d %hd", &x, &aux.vf, &aux.cost);
G[x].push_back (aux);
}
for (i=2; i<=n; ++i)
{
cmin[i]=INF;
prec[i]=1;
}
Z[1]=1;
for (i=0; i<G[1].size(); ++i)
cmin[G[1][i].vf]=G[1][i].cost;
fclose(fin);
return;
}
void Dijkstra()
{
int i, j, vfmin, minimus;
for (i=1; i<=n-1; ++i)
{
minimus=INF;
for (j=2; j<=n; ++j)
if (!Z[j] && cmin[j]<minimus)
{
minimus=cmin[j];
vfmin=j;
}
Z[vfmin]=true;
for (j=0; j<G[vfmin].size(); ++j)
if (cmin[G[vfmin][j].vf]>cmin[vfmin]+G[vfmin][j].cost)
{
cmin[G[vfmin][j].vf]=cmin[vfmin]+G[vfmin][j].cost;
prec[G[vfmin][j].vf]=vfmin;
}
}
return;
}
void afisare()
{
FILE*fout=fopen ("dijkstra.out", "w");
int i;
for (i=2; i<=n; ++i)
if (cmin[i]==INF)
fprintf(fout, "0 ");
else
fprintf(fout, "%d ", cmin[i]);
fclose(fout);
return;
}