Cod sursa(job #1699216)

Utilizator geo_furduifurdui geo geo_furdui Data 6 mai 2016 17:50:50
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include<cstring>
#include<climits>
using namespace std;
ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");
int a[1000][1000],d[1001],viz[1001],n,m;
void citire ()
{ int x,y,k;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>k;
        a[x][y]=k;
    }
}
void init ()
{
    for(int i=1;i<=n;i++)
    {
        d[i]=a[1][i];
        if(d[i]==0) d[i]=INT_MAX;
    }
    d[1]=0;
    viz[1]=1;
}
void dijkstra ()
{  int poz;
    for(int i=1;i<=n-1;i++)
    { int minim=INT_MAX;
        for(int j=2;j<=n;j++)
        {
            if(viz[j]==0)
            {
                if(d[j]<minim) {minim=d[j]; poz=j;}
            }
        }
        if(minim==INT_MAX) break; viz[poz]=1;
        for(int j=2;j<=n;j++)
        {
            if(d[j]>d[poz]+a[poz][j] && a[poz][j]!=0) d[j]=d[poz]+a[poz][j];
        }
    }
}
void afis ()
{
    for(int i=2;i<=n;i++)
    {if(d[i]==INT_MAX) d[i]=0;
        cout<<d[i]<<" ";}
}
int main()
{
    citire();
    init();
    dijkstra();
    afis();
    return 0;
}