Pagini recente » Cod sursa (job #759548) | Cod sursa (job #1639841) | Cod sursa (job #2012780) | Cod sursa (job #402887) | Cod sursa (job #1735740)
#include <fstream>
#include <vector>
#include <queue>
#define MAX 50005
#define INF 1<<30
using namespace std;
struct data{
int edge, weight;
} nd;
vector<data> v[MAX];
queue<int> q;
int nodes, edges, distances[MAX];
int initial_point(1);
void scan();
void solve();
void write();
int main(){
scan();
solve();
write();
return 0;
}
void scan(){
ifstream fin ("dijkstra.in");
fin >> nodes >> edges;
int x, y, z, m = edges;
while(m--){
fin >> x >> y >> z;
nd.edge = y, nd.weight = z;
v[x].push_back(nd);
}
for (int i = 1; i <= nodes; ++i)
distances[i] = INF;
fin.close();
}
void solve(){
distances[initial_point] = 0;
q.push(initial_point);
while(!q.empty()){
int k = q.front();
for (unsigned int i = 0; i < v[k].size(); ++i)
if (distances[v[k][i].edge] > distances[k] + v[k][i].weight)
distances[v[k][i].edge] = distances[k] + v[k][i].weight,
q.push(v[k][i].edge);
q.pop();
}
}
void write(){
ofstream fout ("dijkstra.out");
for (int i = 1; i <= nodes; ++i){
if (i == initial_point)
continue;
else fout << (distances[i] == INF ? -1 : distances[i]) << " ";
//else fout << "Node " << i << ": " << (distances[i] == INF ? -1 : distances[i]) << "\n";
//else printf ("Node %d: %d\n", i, distances[i] == INF ? -1 : distances[i]);
}
fout.close();
}