Cod sursa(job #2574313)

Utilizator yo_andrei_2003Murica Andrei yo_andrei_2003 Data 5 martie 2020 21:32:23
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>

using namespace std;
FILE *fin, *fout;
char ap[50003];
int d[50003], n, m;
vector <pair <int,int> >g[50003];
priority_queue <pair <int,int> > v;
void dijkstra(int a) {
    ap[a]=1;
    d[a]=0;
    v.push(make_pair(0,a));
    while(!v.empty()) {
        //fprintf(fout, "%d " ,a);
        a=v.top().second;
        v.pop();
        for (int i=0;i<g[a].size();i++) {
            int next=g[a][i].first;
            int cost=g[a][i].second;
            if (d[a]+cost<d[next]) {
                d[next]=d[a]+cost;
                if (ap[next]==0) {
                    v.push(make_pair(d[next], next));
                    ap[next]=1;
                }
            }
        }
    }
}
int main()
{
    int i, a, b, c;
    fin=fopen("dijkstra.in" ,"r");
    fout=fopen("dijkstra.out" ,"w");
    fscanf(fin, "%d%d" ,&n ,&m);
    for (i=0;i<m;i++) {
        fscanf(fin, "%d%d%d" ,&a ,&b ,&c);
        g[a].push_back(make_pair(b,c));
    }
    for (i=1;i<=n;i++) {
        d[i]=1000000009;
    }
    dijkstra(1);
    /*for (i=1;i<=n;i++) {
        for (int l=0;l<g[i].size();l++) {
            fprintf(fout, "%d " ,g[i][l].first);
        }
        fprintf(fout, "\n");
    }*/
    for (i=2;i<=n;i++) {
        if (d[i]==1000000009) {
        fprintf(fout, "0 ");
        }
        else {
        fprintf(fout, "%d " ,d[i]);
        }
    }
    cout << "Hello world!" << endl;
    return 0;
}