Cod sursa(job #1649551)

Utilizator ogyolobogyoloogyolo bogyolo ogyolobogyolo Data 11 martie 2016 14:07:57
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <queue>

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;
    queue <int> vsor;
    vsor.push(i0);
    bool b[n];
    for (int i=0;i<n;i++) {d[i]=nt[i0][i];b[i]=false;}
    b[i0]=true;
    while (!vsor.empty()) {
        i0=vsor.front();
        vsor.pop();
        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];
            vsor.push(mini);
            b[mini]=true;
        }
    }
    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";}
}