Cod sursa(job #1649567)

Utilizator ogyolobogyoloogyolo bogyolo ogyolobogyolo Data 11 martie 2016 14:13:19
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 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 i0=0, min, mini;
    bool b[n], kesz=false;
    for (int i=0;i<n;i++) {d[i]=nt[i0][i];b[i]=false;}
    b[i0]=true;
    while (!kesz) {
        min=1001;
        mini=n;
        for (int i=0;i<n;i++) {
            if (min>nt[i][i0] && !b[i] && nt[i][i0]!=0) {
                    min=nt[i][i0];
                    mini=i;
            }
        }
        //cout<<"m ";
        if (mini!=n) {
            if (d[mini]>min+d[i0] || d[mini]==0) d[mini]=min+d[i0];
            i0=mini;
            b[mini]=true;
        }
        kesz=true;
        for (int i=0;i<n;i++) if (!b[i]) {kesz=false;break;}
    }
    for (int i=1;i<n;i++) w<<d[i]<<" ";
}

int main()
{
    beolvas();
    bejaras();
    f.close();
    w.close();
    //for (int i=0;i<n;i++) cout<<d[i]<<' ';
    //for (int i=0;i<n;i++) {for (int j=0;j<n;j++) cout<<nt[i][j]<<' '; cout<<"\n";}
}