Cod sursa(job #1301577)

Utilizator refugiatBoni Daniel Stefan refugiat Data 26 decembrie 2014 09:25:56
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<list>
#include<limits.h>
#include<bitset>
using namespace std;
struct drum
{
    int d;
    int l;
};
list<drum> l[50000];

int dijkstra(int n)
{
    bool f[n];
    int y[n];
    int i;
    for(i=0;i<n;++i)
    {
        y[i]=INT_MAX;
        f[i]=false;
    }
    y[0]=0;
    int j;
    int minn,z;
    drum x;
    list<drum>::iterator k;
    for(i=0;i<n-1;++i)
    {
        minn=INT_MAX;
        for(j=0;j<n;++j)
            if(y[j]<minn&&f[j]==false)
            {
                minn=y[j];
                z=j;
            }
        f[z]=true;
        for(k=l[z].begin();k!=l[z].end();++k)
        {
            x=*k;
            if(y[x.d]>minn+x.l)
                y[x.d]=minn+x.l;
        }
    }
    FILE* so=fopen("dijkstra.out","w");
    for(i=1;i<n;++i)
    {
        if(y[i]==INT_MAX)
            fprintf(so,"0 ");
        else
            fprintf(so,"%i ",y[i]);
    }
    fprintf(so,"\n");
}

int main()
{
    ifstream si;
    si.open("dijkstra.in");
    int n,m;
    si>>n>>m;
    int i;
    int a,b,c;
    for(i=0;i<m;++i)
    {
        si>>a>>b>>c;
        --a;
        --b;
        l[a].push_back({b,c});
        l[b].push_back({a,c});
    }
    dijkstra(n);
}