Cod sursa(job #1571735)

Utilizator vancea.catalincatalin vancea.catalin Data 18 ianuarie 2016 14:16:27
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 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])
                {
                    d[j]=d[pmin]+x[pmin][j];
                }
            }
        }
    }
}
int main()
{
    int i,j,a,b,c;
    fin>>n>>m;
    for(i=1;i<=n;i++) for(j=1;j<=n;j++) x[i][j]=NMAX;
    for(i=1;i<=m;i++)
    {
        fin>>a>>b>>c;
        x[a][b]=c;
        //x[b][a]=c;
    }
    d[1]=0;
    d[0]=DX;
    for(i=2;i<=n;i++) d[i]=DX;
    dijkstra(1);
    for(int i=2;i<=n;i++)
    {
        if(d[i]==NMAX||d[i]==DX)
            fout<<"0 ";
        else
            fout<<d[i]<<" ";
    }
    return 0;
}