Cod sursa(job #1571712)

Utilizator vancea.catalincatalin vancea.catalin Data 18 ianuarie 2016 13:43:38
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<iostream>
#include<fstream>
#include<vector>
#define DX 9999999
#define NMAX 30000
using namespace std;
fstream fin("dijkstra.in",ios::in),fout("dijkstra.out",ios::out);
int n,m,d[NMAX],ap[NMAX];
short x[NMAX][NMAX];
int minim()
{
    int pmin=0;
    for(int i=1;i<=n;i++)
    {
        if(d[i]<d[pmin] && ap[i]==0)
        {
            pmin=i;
        }
    }
    return pmin;
}
void dijkstra(int nod)
{
    int pmin,i,j;
    for(i=1;i<=n;i++)
    {
        pmin=minim();
        if(pmin!=0)
        {
            ap[pmin]=1;
            for(j=2;j<=n;j++)
            {
                if(d[j]>d[pmin]+x[pmin][j] && x[pmin][j]!=0)
                {
                    d[j]=d[pmin]+x[pmin][j];
                }
            }
        }
    }
}
int main()
{
    int i,a,b,c;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        x[a][b]=c;
    }
    d[0]=DX;
    for(i=2;i<=n;i++) d[i]=DX;
    dijkstra(1);
    for(int i=2;i<=n;i++)
    {
        if(d[i]==DX)
            fout<<"0 ";
        else
            fout<<d[i]<<" ";
    }
    return 0;
}