Mai intai trebuie sa te autentifici.
Cod sursa(job #704920)
Utilizator | Data | 2 martie 2012 22:02:00 | |
---|---|---|---|
Problema | Algoritmul lui Dijkstra | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.03 kb |
#include <iostream>
#include <fstream>
using namespace std;
int v[5000][5000], s[25000], d[2500], t[25000];
void drum(int i)
{
if(t[i]) drum(t[i]); cout<<i<<" ";
}
int main()
{
int inf=3000, r=1, n, m, poz, min;
ifstream f("alex.in");
f>>n>>m;
//for(int i=1;i<=n;i++)
// for(int j=1;j<=n;j++)
// v[i][j]=3500;
for(int y=1;y<=m;y++)
{int x, y, z;
f>>x>>y>>z;
v[x][y]=z;
}
s[r]=1;
for(int i=1;i<=n;i++)
{
d[i]=v[r][i];
if(i!=r && d[i]<inf)
t[i]=r;
}
for(int i=1;i<=n-1;i++)
{
min=inf;
for(int j=1;j<=n;j++)
if(!s[j] && d[j]<min)
{
min=d[j];
poz=j;
}
s[poz]=1;
for(int j=1;j<=n;j++)
if(!s[j] && d[j]>d[poz]+v[poz][j])
{
d[j]=d[poz]+v[poz][j];
t[j]=poz;
}
}
ofstream g("dijkstra.out");
for(int i=2;i<=n;i++)
g<<d[i]<<" ";
return 0;
}