Pagini recente » Cod sursa (job #2461878) | Cod sursa (job #1335778) | Cod sursa (job #427918) | Cod sursa (job #1637677) | Cod sursa (job #718418)
Cod sursa(job #718418)
#include <cstdio>
#define INF 2000000000
using namespace std;
int a[50000][50000], d[50000], t[50000], viz[50000], n, m;
void citire()
{
freopen("dijkstra.in", "r", stdin);
scanf("%d%d", &n, &m);
int x, y, c;
for(int i=1; i<=m; i++)
{
scanf("%d%d%d", &x, &y, &c);
a[x][y]=c;
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
if(a[i][j]==0) a[i][j]=INF;
if(a[j][i]==0) a[j][i]=INF;
}
// initializare
for(int i=2; i<=n; i++)
{
d[i]=a[1][i];
if(d[i]!=INF) t[i]=1;
}
viz[1]=1;
}
void dijkstra()
{
int min=INF, nod, k=1, i;
bool ok = true;
while(ok)
{
min=INF;
for(i=2; i<=n; i++)
if(d[i]<min && !viz[i]) min = d[i], nod=i;
if(min==INF)
{
ok=0;
break;
}
viz[nod]=1;
k++;
for(i=2; i<=n; i++)
{
if(d[i]>d[nod]+a[nod][i])
{
d[i]=d[nod]+a[nod][i];
t[i]=nod;
}
}
if(k==n) ok=0;
}
}
int main()
{
citire();
dijkstra();
freopen("dijkstra.out", "w", stdout);
for(int i=2; i<=n; i++)
printf("%d ", d[i]);
return 0;
}