Cod sursa(job #1895498)

Utilizator markyDaniel marky Data 27 februarie 2017 23:42:53
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include<bits/stdc++.h>
using namespace std;
# define INF 0x3f3f3f3f

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

typedef pair<int, int> iPair;

class Graph
{
    int V;

    list< pair<int, int> > *adj;

public:
    Graph(int V);

    void addEdge(int u, int v, int w);

    void shortestPath(int s);
};

Graph::Graph(int V)
{
    this->V = V;
    adj = new list<iPair> [V];
}

void Graph::addEdge(int u, int v, int w)
{
    adj[u].push_back(make_pair(v, w));
}

void Graph::shortestPath(int src)
{
    priority_queue< iPair, vector <iPair> , greater<iPair> > pq;

    vector<int> dist(V, INF);

    pq.push(make_pair(0, src));
    dist[src] = 0;

    while (!pq.empty())
    {
        int u = pq.top().second;
        pq.pop();

        list< pair<int, int> >::iterator i;
        for (i = adj[u].begin(); i != adj[u].end(); ++i)
        {
            int v = (*i).first;
            int weight = (*i).second;

            if (dist[v] > dist[u] + weight)
            {
                dist[v] = dist[u] + weight;
                pq.push(make_pair(dist[v], v));
            }
        }
    }

    for(int i=1;i<V;i++)
        dist[i]!=INF? g<<dist[i]<<" " : g<<0<<" ";
        g<<'\n';
}

int main()
{

    int n,m,i,x,y,z;
    f >> n >> m;
    Graph g(n);

    for(i=0;i<m;i++){
        f>>x>>y>>z;
        g.addEdge(x-1,y-1,z);
    }

    g.shortestPath(0);

    return 0;
}