Cod sursa(job #2105826)

Utilizator AvramDanielAvram Daniel AvramDaniel Data 14 ianuarie 2018 13:23:22
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
using namespace std;

ifstream  in("dijkstra.in");
ofstream out("dijkstra.out");
int N,a,b,w,M;
int am[50010][50010];
int dis[50010];
int visited[50010];

void dij(int x){
visited[x]=1;
for (int i=1;i<=N;i++)
    if (!visited[i] && am[x][i]!=-1)
if (dis[x]+am[x][i]<dis[i] || dis[i]==-1)
    dis[i]=dis[x]+am[x][i];

int smaller=-1,sw=-1;
for (int i=1;i<=N;i++){
    if(!visited[i] && dis[i]>=0)
       if (dis[i]<sw || sw==-1){
        sw=dis[i];
        smaller=i;
    }}

if (smaller!=-1){
    dij(smaller);
return;
}
return;}
int main()
{
    in>>N>>M;

    for (int i=0;i<=N;i++){

        for (int j=0;j<=N;j++)
            am[i][j]=-1;
    }
    for (int i=1;i<=N;i++)
        dis[i]=-1;
for (int i=1;i<=M;i++){
        in>>a>>b>>w;
        am[a][b]=w;
        am[b][a]=w;
    }
dis[1]=0;
    dij(1);
    for (int i=2;i<=N;i++){
        out<<dis[i]<<' ';
    }
    return 0;
}