Cod sursa(job #899935)

Utilizator bmanghiucManghiuc Bogdan bmanghiuc Data 28 februarie 2013 16:56:45
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <iostream>
#include <cstdio>
using namespace std;
int N,M,cost[50000];
bool viz[50000];
int a[250000][4];
void citire()
{
    int i;
    cin>>N>>M;
    for(i=1;i<=M;i++)
        cin>>a[i][1]>>a[i][2]>>a[i][3];

}
void dijkstra()
{
    int i,ok=1,min=1,k;
    viz[1]=1;
    for(i=1;i<=N;i++)
        cost[i]=250000000;
    for(i=1;i<=M;i++)
        if(a[i][1]==1)
            cost[a[i][2]]=a[i][3];
    while(ok==1)
    {
        min=250000000;
        for(i=2;i<=N;i++)
            if(cost[i]<min && viz[i]==0)
                {
                    min=cost[i];
                    k=i;
                }
        if(min<250000000)
        {
            viz[k]=1;
            for(i=1;i<=M;i++)
                if(a[i][1]==k && viz[a[i][2]]==0 && cost[a[i][2]]>cost[a[i][1]]+a[i][3])
                    cost[a[i][2]]=cost[a[i][1]]+a[i][3];

        }
        else
        ok=0;
    }
}
void afis()
{
    int i;
    for(i=2;i<=N;i++)
        if(cost[i]== 250000000)
            cout<<"0"<<" ";
        else
            cout<<cost[i]<<" ";
}
int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    citire();
    dijkstra();
    afis();
    return 0;
}