Cod sursa(job #1659450)

Utilizator marcudaniel12Marcu Tudor Daniel marcudaniel12 Data 22 martie 2016 10:57:51
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>

using namespace std;

#define MAX 5000
#define infinit 0x3f3f3f3f

ifstream f("date.in");
ofstream g("date.out");

    long n,m,v[MAX][MAX],d[MAX],ant[MAX],sel[MAX];
    int i,j,a,b,c,minim,k;


int main(){
    f>>n>>m;
    for (i=1;i<=n;i++)
        for (j=1; j<=n;j++){
                if (i==j)
                    v[i][j]=0;
                else
                    v[i][j]=infinit;}
    for (i=1;i<=m;i++){
        f>>a>>b>>c;
        v[a][b]=c;
        v[b][a]=c;}

    for (i=1; i<=n; i++){
        sel[i]=0;
        d[i]=v[1][i];
        if (d[i]<infinit)
            ant[i]=1;
        else
            ant[i]=0;}

    sel[1]=1;
    d[1]=0;
    ant[1]=0;


    bool ok=true;
    while (ok){
         minim=infinit;
            for(i=1;i<=n;i++)
                if(!sel[i] && d[i]<minim){
                    minim=d[i];
                    k=i;}
            if (minim==infinit)
                ok=false;
            else{
                sel[k]=1;
                for(i=1;i<=n;i++)
                if (!sel[i] && d[k]+v[k][i]<d[i]){
                   d[i]=d[k]+v[k][i];
                   ant[i]=k;}
            }
}
   for (i=2;i<=n;i++)
        g<<d[i]<<" ";
   g<<endl;
   f.close();
   g.close();
   return 0;
}