Cod sursa(job #2133246)

Utilizator mihaicivMihai Vlad mihaiciv Data 16 februarie 2018 18:29:54
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 100001
#define inf 1000001
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int a[1001][1001],d[1001],vis[1001];
int n,m;
void citire() {
    f>>n>>m;
    int x,y,c1;
    for (int i=1;i<=m;i++) {
        f>>x>>y>>c1;
        a[x][y]=c1;
        a[y][x]=c1;
    }
}
void rez() {
    for (int i=1;i<=n;i++) {
        if (a[1][i]==0 && i!=1) {
            d[i]=inf;
        }
        else {
            d[i]=a[1][i];
        }
    }
    /*
    for (int i=1;i<=n;i++) {
        cout<<d[i]<<" ";
    }
    */
    int minim=0;
    int pos=0;
    vis[1]=1;
    for (int i=2;i<=n;i++) {
        minim=inf;
        for (int j=1;j<=n;j++) {
            if (d[j]<minim && vis[j]==0) {
                minim=d[j];
                pos=j;
            }
        }
        vis[pos]=1;
        for (int j=1;j<=n;j++) {
            if ( d[j]>d[pos]+a[pos][j]  && a[pos][j]!=0) {
                d[j]=d[pos]+a[pos][j];
            }
        }
    }
    for (int i=2;i<=n;i++) {
        if (d[i]==inf) {
            g<<"0 ";
        }
        else {
            g<<d[i]<<" ";
        }
    }
}
int main() {
    citire();
    rez();
    return 0;
}