Cod sursa(job #2576196)

Utilizator andreibudacaBudaca Andrei andreibudaca Data 6 martie 2020 17:48:17
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

const int inf = 1000000000;
int a[20001][20001];
int d[20001];
int n,m;
queue <int> c;
int viz[20001];

void citire();
void dijkstra(int);
void afis();

int main()
{
   citire();
   if(n<20001)
   dijkstra(1);
   afis();
    return 0;
}
void citire(){
f>>n>>m;
int x,y,c;
for(int i=1;i<=m;i++){
    f>>x>>y>>c;
    a[y][x] = a[x][y] = c;
}
}
void dijkstra(int nod){

for(int i=1;i<=n;i++)
    d[i] = inf;
d[nod] = 0;
c.push(nod);
viz[nod] = 1;
while(!c.empty()){
    int i = c.front();
    c.pop();
    for(int j = 1; j <= n; j++){
        if(a[i][j]){
            if(d[i] + a[i][j] < d[j]){
                d[j] = d[i] + a[i][j];
            if(!viz[j]){
                viz[j] = 1;
                c.push(j);
            }
            }
        }
    }
}

}
void afis(){
for(int i=2;i<=n;i++)
    g<<d[i]<<" ";
}