Cod sursa(job #730649)

Utilizator RarRaresNedelcu Rares RarRares Data 6 aprilie 2012 18:28:28
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#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;
}