Cod sursa(job #1650300)

Utilizator ogyolobogyoloogyolo bogyolo ogyolobogyolo Data 11 martie 2016 17:36:34
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("dijkstra.in");
ofstream w("dijkstra.out");
int n, m, nt[2000][2000], d[1999];

void beolvas() {
    f>>n>>m;
    int x, y, r;
    for (int i=0;i<n;i++) for (int j=0;j<n;j++) nt[i][j]=0;
    for (int i=0;i<m;i++) {
        f>>x>>y>>r;
        nt[x-1][y-1]=r;
        nt[y-1][x-1]=r;
    }
}

void bejaras() {
    int min, mini1, mini2;
    bool b[n], kesz=false;
    for (int i=1;i<n;i++) {d[i]=nt[0][i];b[i]=false;}
    while (!kesz) {
        min=1001;
        mini1=n;
        for (int i=1;i<n;i++) {
            if (min>d[i] && !b[i] && d[i]!=0) {
                    min=d[i];
                    mini1=i;
            }
        }
        if (mini1!=n) {
            b[mini1]=true;
            min=1001;
            mini2=n;
            for (int i=0;i<n;i++) {
                if (min>nt[mini1][i] && nt[mini1][i]!=0 && !b[i]) {
                    mini2=i;
                    min=nt[mini1][i];
                }
            }
            if (mini2!=n && (d[mini1]+min<d[mini2] || d[mini2]==0)) d[mini2]=d[mini1]+min;
        }
        kesz=true;
        for (int i=1;i<n;i++) if (!b[i]) kesz=false;
    }
    for (int i=1;i<n;i++) w<<d[i]<<" ";
}

int main()
{
    beolvas();
    bejaras();
    f.close();
    w.close();
}