Pagini recente » Cod sursa (job #1022426) | Cod sursa (job #1929304) | Cod sursa (job #2889067) | Cod sursa (job #123200) | Cod sursa (job #2398722)
#include <fstream>
#define INF 100000
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
void citire(int p[105][105])
{
int i,j;
while(f >> i >> j)
{
f >> p[i][j];
}
}
void initializare(int n, int x, int p[105][105], int d[105])
{
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
p[i][j] = INF;
for(int i = 1; i <= n; i++)
p[i][i] = 0;
for(int i = 0; i <= n; i++)
{
d[i] = INF;
}
d[x] = 0;
}
void Dijkstra(int n, int x, int p[105][105],int d[105], int vizitat[105])
{
int crt = x;
while(d[crt] != INF)
{
crt = 0;
for(int i = 1; i <= n; i++)
if(d[i] < d[crt] && !vizitat[i]) crt = i;
vizitat[crt] = 1;
for(int i = 1; i <= n; i++)
{
if(p[crt][i] + d[crt] < d[i])
{
d[i] = p[crt][i] + d[crt];
}
}
}
}
void afisare(int n, int d[105])
{
for(int i = 2; i <= n; i++)
if(d[i] == INF) g << 0 << " ";
else g << d[i] << " ";
}
int main()
{
int n,x,crt,p[105][105],vizitat[105] = {0},t[105] = {0},d[105];
f >> n;
x = 1;
initializare(n,x,p,d);
citire(p);
Dijkstra(n,x,p,d,vizitat);
afisare(n,d);
return 0;
}