Cod sursa(job #2442138)

Utilizator patrickdanDan patrick patrickdan Data 22 iulie 2019 22:14:48
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <cstdio>
#include<vector>
using namespace std;
#define INF 1000000001
struct arc
{
    int v,c;
};
struct parent
{
    int v,t;
};
vector <arc>G[50001];
parent d[50001];
int f[50001];
int ans[50001];
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    int n,m,a,b,c,tot,i;
    arc arc1;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&b,&c);
        arc1.v=b;
        arc1.c=c;
        G[a].push_back(arc1);
        arc1.v=a;
        G[b].push_back(arc1);
    }
    for(i=2;i<=n;i++)
        d[i].v=INF;
    bool ok=1;
    int fi;
    fi=1;
    tot=0;
    while(ok)
    {
    f[fi]=1;
    for(i=0;i<G[fi].size();i++)
        if(d[G[fi][i].v].v>G[fi][i].c){
          d[G[fi][i].v].v=G[fi][i].c;
          d[G[fi][i].v].t=fi;
        }
    int min1=INF,poz=INF;
    ok=0;
    for(i=2;i<=n;i++){
        if(f[i]==0)
          ok=1;
        if(d[i].v<min1 && f[i]==0)
          {
              min1=d[i].v;
              poz=i;
          }
    }
    if(poz!=INF)
        ans[poz]=d[poz].v+ans[d[poz].t];
    else
        break;
    fi=poz;
    }
    for(i=2;i<=n;i++)
    {
        if(ans[i]>=INF)
            ans[i]=0;
        printf("%d ",ans[i]);
    }
    return 0;
}