Cod sursa(job #2674238)

Utilizator ArsenieArsenie Vlas Arsenie Data 18 noiembrie 2020 20:48:28
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 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; /// s - starting vertice; t - ending vertice;
struct str
{
    ll distanta, sursa, 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].sursa=y;
                        v[y].stare=1;
                    }
            }
    }
    v[x].stare=2;
}

int main(){
    cin>>n>>p;
    for(ll i=1;i<=p;i++)
    {
        ll x,y,z;
        cin>>x>>y>>z;
        a[x][y]=z;
        a[y][x]=z;
    }
    s=1;
    v[s].distanta=0;
    v[s].sursa=s;
    v[s].stare=1;
    for(ll i=1;i<=n;i++)
    {
        if(i!=s)
        {
        v[i].distanta=inf;
        v[i].sursa=i;
        v[i].stare=0;
        }
    }
    while(find())
    {
        dijkstra(find());
    }
    for(ll i=2;i<=n;i++)
        cout<<v[i].distanta<<' ';
    return 0;
}