Cod sursa(job #1563090)

Utilizator ipus1Stefan Enescu ipus1 Data 5 ianuarie 2016 17:59:02
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<cstdio>
#include<vector>
using namespace std;
vector <int> v[50001];
vector <int> v2[50001];
bool viz[50001];
int d[50001],n,m;
void dijk(int nod)
    {int i,min,x;
    min=1000000000;
    for(i=0;i<v[nod].size();i++)
        if(viz[v[nod][i]]==0)
            if(d[nod]+v2[nod][i]<d[v[nod][i]])
                d[v[nod][i]]=d[nod]+v2[nod][i];
    viz[nod]=1;
    for(i=1;i<=n;i++)
        if(viz[i]==0&&d[i]<min)
            {min=d[i];
            x=i;
            }
    if(min!=1000000000)
        dijk(x);
    }
int main ()
{freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
int i,j,a,b,c,x,q;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
    {scanf("%d%d%d",&a,&b,&c);
    v[a].push_back(b);
    v2[a].push_back(c);
    }
for(i=2;i<=n;i++)
    d[i]=1000000000;
dijk(1);
for(i=2;i<=n;i++)
    if(d[i]!=1000000000)
        printf("%d ",d[i]);
    else
        printf("0 ");
return 0;
}