Pagini recente » Cod sursa (job #2110045) | Cod sursa (job #179590) | Cod sursa (job #2245357) | Cod sursa (job #2920358) | Cod sursa (job #730649)
Cod sursa(job #730649)
#include <iostream>
#include <cstdio>
using namespace std;
const int INF = 10000;
int a[2000][2000], n, m;
int cost[2000], viz[2000], p[2000];
int minim(int &poz)
{
poz = 0;
int x = INF;
for(int i = 1; i <= n; i++)
if(!viz[i] && cost[i] < x)
x = cost[i], poz = i;
return x;
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
cin >> n >> m;
for(int i = 1; i <= m; i++)
{
int x, y;
cin >> x >> y;
cin >> a[x][y];
}
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
if(!a[i][j]) a[i][j] = INF;
a[i][i] = 0;
}
for(int i = 1; i <= n; i++)
cost[i] = a[1][i];
viz[1] = 1;
int poz;
p[1] = 0;
while(minim(poz) != INF)
{
viz[poz] = 1;
for(int i = 2; i <= n; i++)
if(cost[poz] + a[poz][i] < cost[i])
{
p[i] = poz; cost[i] = cost[poz] + a[poz][i];
}
}
for(int i = 2; i <= n; i++)
if(cost[i] == INF) cout << 0 << ' ';
else
cout << cost[i] << ' ';
return 0;
}