Pagini recente » Cod sursa (job #418265) | Cod sursa (job #188003) | Cod sursa (job #1058532) | Cod sursa (job #1503343) | Cod sursa (job #1288626)
#include<fstream>
#include<vector>
#include<deque>
#include<utility>
#include<iostream>
#define INF 99999
#define NMAX 50001
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
class Edge {
public:
int neighbor;
int cost;
Edge(int n, int c) {
neighbor = n; cost = c;
}
};
typedef vector<Edge> neighborList;
typedef neighborList Graph[NMAX];
typedef int Vertex;
Graph G; int nodes;
void citire() {
int m, a, b, val;
fin>>nodes>>m;
//G.resize(nodes);
for(int i=0;i<m;i++) {
fin>>a>>b>>val;
G[a-1].push_back(Edge(b-1, val));
G[b-1].push_back(Edge(a-1, val));
}
}
void afis(vector<int> v) {
for(int i=0; i<v.size(); i++) {
cout<<v[i]<<" ";
}
cout<<endl;
}
void afisgraf() {
for(int i=0; i<nodes; i++) {
cout<<i<<": ";
for(int j=0; j<G[i].size(); j++) {
cout<<"("<<G[i][j].neighbor<<", "<<G[i][j].cost<<") ";
}
cout<<'\n';
}
}
vector< int > bellman(int source) {
deque<int> Q;
// cout<<nodes;
vector<int> dist (nodes, INF);
//TODO: REMOVE
// afis(dist);
// afisgraf();
dist[source] = 0;
// cout<<dist.size();
for(int i=0; i<G[source].size(); i++) {
Q.push_back(G[source][i].neighbor);
dist[G[source][i].neighbor] = G[source][i].cost;
}
// afis(dist);
while(!Q.empty()) {
int top = Q[0];
Q.pop_front();
for(int i=0; i<G[top].size(); i++) {
Edge e = G[top][i];
if(dist[e.neighbor] > dist[top] + e.cost) {
dist[e.neighbor] = dist[top] + e.cost;
Q.push_back(e.neighbor);
}
}
}
return dist;
}
int main() {
citire();
int source = 0;
vector< int > sol(bellman(source));
for(int i=1; i<nodes; i++) {
fout<<sol[i]<<" ";
// cout<<sol[i]<<" ";
}
fin.close();
fout.close();
return 0;
}