Cod sursa(job #2366776)

Utilizator pand4_38Vasilevici Vasia pand4_38 Data 4 martie 2019 22:08:10
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include    <iostream>
#include    <fstream>
#include    <queue>
#include    <vector>
#define N 5001
using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

const int oo = (1 << 30);

int a[N][N],n,m,viz[N];
int D[N];

void Citeste()
{
    fin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        int x, y, c;
        fin >> x >> y >> c;
        a[x][y]=a[y][x]=c;
    }
}

void Dijkstra(int x)
{
    for(int i = 1; i <= N; i++)
        D[i] = oo;
    int p,u,i,c[N];
    p=u=1;
    c[p]=x; D[x]=0;
    viz[x]=1;

    while(p<=u)
    {
        x=c[p++];
        for(i = 0; i <= n; i++)
            if(a[x][i]>0 && D[x] + a[x][i] < D[i])
            {
                D[i] = D[x] + a[x][i];
                if(viz[i]==0)
                {
                    c[++u]=i;
                    viz[i]=1;
                }
            }
    }
}

void Afiseaza()
{
    for(int i = 2; i <= n; i++)
    {
        if(D[i] != oo)
            fout << D[i] << " ";
        else
            fout << "0 ";
    }
}

int main()
{
    Citeste();
    Dijkstra(1);
    Afiseaza();
    return 0;
}