Cod sursa(job #1613695)

Utilizator GeanaVladGeana Vlad GeanaVlad Data 25 februarie 2016 16:18:48
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int m[1001][1001],d[1001],s[1001],t[1001];
void drum(int i)
{
    if(t[i])
        drum(t[i]);
    g<<i<<" ";
}
int main()
{
    int n,p,i,j,a,b,c,poz,mini=9999,nr;
    f>>n>>p;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        if(i==j) m[i][j]=0;
    else m[i][j]=9999;
    while(f>>a>>b>>c)
      m[a][b]=c;

    for(i=1;i<=n;i++)
    {
        d[i]=m[p][i];
        t[i]=p;
    }
    s[p]=1;
    d[p]=0;

    for(nr=1;nr<=n-1;nr++)
    {
        mini=9999;
        for(i=1;i<=n;i++)
            if(s[i]==0&&d[i]<mini)
        {
            mini=d[i];
            poz=i;
        }
        s[poz]=1;

        for(i=1;i<=n;i++)
            if(d[i]>d[poz]+m[poz][i])
        {
            d[i]=d[poz]+m[poz][i];
            t[i]=poz;
        }
    }
  for(i=1;i<=n;i++)
  if(d[i]==9999) d[i]=-1;
  for(i=1;i<=n;i++)
    g<<d[i]<<" ";
    return 0;
}