Pagini recente » Cod sursa (job #3206621) | Cod sursa (job #1511873) | Cod sursa (job #2762117) | Cod sursa (job #1362367) | Cod sursa (job #889669)
Cod sursa(job #889669)
#include<fstream>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int A[5000][5000], T[50000], S[50000], D[50000], n, m, c, x, y, poz, inf = 999999999, r, minn;
void drum(int i)
{
if(T[i])
drum(T[i]);
fout << i << " ";
}
void Read()
{
fin >> n >> m;
r = 1;
for(int i = 1; i <= m; i++)
{
fin >> x >> y >> c;
A[x][y] = c;
}
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i != j && A[i][j] == 0)
A[i][j] = inf;
S[r] = 1;
for(int i = 1; i <= n; i++)
{
D[i] = A[r][i];
if(i != r)
if(D[i] < inf)
T[i] = r;
}
}
void Dijkstra()
{
for(int i = 1; i <= n - 1; i++)
{
minn = inf;
for(int j = 1; j <= n; j++)
if(S[j] == 0)
{
if(D[j] < minn)
{
minn = D[j];
poz = j;
}
}
S[poz] = 1;
for(int k = 1; k <= n; k++)
{
if(S[k] == 0)
if(D[k] > D[poz] + A[poz][k])
{
D[k] = D[poz] + A[poz][k];
T[k] = poz;
}
}
}
}
int main()
{
Read();
Dijkstra();
for(int i = 2; i <= n; i++)
fout << D[i] << " ";
fin.close();
fout.close();
return 0;
}