Cod sursa(job #2068855)

Utilizator ioanalexandraIoan Alexandra ioanalexandra Data 18 noiembrie 2017 11:27:59
Problema Algoritmul lui Dijkstra Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("dijkstra.in");
ofstream g ("dijkstra.out");
int n,s,c[1001][1001],d[25000],t[25000],i,j,x,y,use[25000],cost,mn,k,inf=200000000;
void citire()
{
    f>>n>>s;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if(i==j) c[i][j]=0;
            else c[i][j]=inf;
    while(f>>x>>y>>cost) c[x][y]=cost;
}
void dijkstra(int s)
{
    int i;
    for(i=1; i<=n; i++) d[i]=inf;
    d[s]=t[s]=0;
    for(k=1; k<=n; k++)
    {
        mn=inf;
        for(i=1; i<=n; i++)
            if(!use[i] && d[i]<mn) mn=d[i],x=i;
        if(mn==inf) break;
        use[x]=1;
        for(i=1; i<=n; i++)
            if(d[x]+c[x][i]<d[i])
            {
                d[i]=d[x]+c[x][i];
                t[i]=x;
            }
    }
}
void afis(int i)
{
    if(t[i]) afis(t[i]);
    g<<i<<" ";
}
int main()
{
    citire();
    dijkstra(1);
    for(i=2;i<=n;i++)
    {
        if(d[i]!=inf) g<<d[i]<<" ";
        else g<<0<<" ";
    }

    return 0;
}