Pagini recente » Cod sursa (job #1441397) | Cod sursa (job #1440884) | Cod sursa (job #3041678) | Cod sursa (job #3144825) | Cod sursa (job #2378487)
#include <cstdio>
using namespace std;
const int Inf = 1000000;
int n,m,Cost[1000][1000],Dist[1000],Viz[1000],Tati[1000];
void Read()
{
FILE *f = fopen("dijkstra.in","r");
int x,y,co;
fscanf(f,"%d %d",&n,&m);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i == j)
Cost[i][j] = 0;
else
Cost[i][j] = Inf;
}
}
for(int i=0;i<m;i++)
{
fscanf(f,"%d %d %d",&x,&y,&co);
Cost[x][y] = co;
}
}
void Init()
{
for(int i=0;i<n;i++)
{
Dist[i] = Cost[0][i]; //Copiez prima liniei pentru nodul 1
if(i != 0)
Viz[i] = 0;
else
Viz[i] = 1;
if(i != 0 || Cost[0][i] == Inf)
Tati[i] = 0;
else
Tati[i] = 1;
}
}
int minim()
{
int M = 99999999;
int loc = 0;
for(int i=0;i<n;i++)
{
if(Viz[i] == 0 && Dist[i] != Inf)
{
if(Dist[i] < M)
{
M = Dist[i];
loc = i;
}
}
}
return loc;
}
void Dijkstra()
{
int loc;
for(int i=1;i<n;i++)
{
loc = minim();
Viz[loc] = 1;
for(int j=0;j<n;j++)
{
if(Viz[j] == 0)
{
if(Dist[j] > Dist[loc] + Cost[loc][j])
{
Dist[j] = Dist[loc] + Cost[loc][j];
Tati[j] = loc;
}
}
}
}
}
int main()
{
FILE *g = fopen("dijkstra.out","w");
Read();
Init();
Dijkstra();
for(int i=1;i<n;i++)
fprintf(g,"%d ",Dist[i]);
return 0;
}