Cod sursa(job #2674263)

Utilizator ArsenieArsenie Vlas Arsenie Data 18 noiembrie 2020 21:14:24
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <bits/stdc++.h>
#define ll long long int
#define double long double
#define pb push_back
#define endl '\n'
#define er erase
#define sz size
#define in insert
#define mp make_pair
#define f first
#define s second
#define mod 1000000007
//#define inf 1000000000
using namespace std;

ll a[1000][1000], n, s, t, p, inf; /// s - starting vertice; t - ending vertice;
struct str
{
    ll distanta, stare;
} v[1000];

ll find()
{
    for(ll i=1;i<=n;i++)
        if(v[i].stare==1) return i;
    return 0;
}

void dijkstra(ll x)
{
    for(ll y=1;y<=n;y++)
    {
        if(a[x][y]!=0 && v[x].stare!=2)
            {
                if( (v[x].distanta+a[x][y])<v[y].distanta )
                    {
                        v[y].distanta=v[x].distanta+a[x][y];
                        v[y].stare=1;
                    }
            }
    }
    v[x].stare=2;
}

int main(){
    ifstream fin("dijkstra.in");
    ofstream fout("dijkstra.out");
    fin>>n>>p;
    for(ll i=1;i<=p;i++)
    {
        ll x,y,z;
        fin>>x>>y>>z;
        a[x][y]=z;
        a[y][x]=z;
        inf=inf+z;
    }
    inf++;
    s=1;
    v[s].distanta=0;
    v[s].stare=1;
    for(ll i=1;i<=n;i++)
    {
        if(i!=s)
        {
        v[i].distanta=inf;
        v[i].stare=0;
        }
    }
    while(find())
    {
        dijkstra(find());
    }
    for(ll i=2;i<=n;i++)
        fout<<v[i].distanta<<' ';
    return 0;
}