Pagini recente » Cod sursa (job #1973711) | Cod sursa (job #2578696) | Istoria paginii utilizator/robert.poziumschi | Istoria paginii runda/igorj_10/clasament | Cod sursa (job #456201)
Cod sursa(job #456201)
/*
* =====================================================================================
*
* Filename: dijkstra.cpp
*
* Description:
*
* Author: Victor Carbune ([email protected])
* Info: Grupa 325, Seria CA
*
* =====================================================================================
*/
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#define INF 1000000
using namespace std;
typedef struct _edge
{
int x, y, cost;
} edge;
vector<edge> graf;
int n, m, *d;
ifstream in("bellmanford.in", ifstream::in);
ofstream out("bellmanford.out", ofstream::out);
void read_data()
{
int x, y, cost;
in >> n >> m;
edge e;
for (int i = 0; i < m; i++) {
in >> x >> y >> cost;
x--, y--;
e.x = x; e.y = y; e.cost = cost;
graf.push_back(e);
}
}
int bellmanford(int s)
{
d = new int[n];
for (int i = 0; i < n; i++)
d[i] = INF;
d[s] = 0;
for (int i = 0; i < n; i++ )
for (int j = 0; j < m; j++)
if (d[graf[j].y] > d[graf[j].x] + graf[j].cost)
d[graf[j].y] = d[graf[j].x] + graf[j].cost;
for (int j = 0; j < m; j++)
if (d[graf[j].y] > d[graf[j].x] + graf[j].cost)
return 1;
return 0;
}
int main() {
read_data();
if (bellmanford(0)) {
printf("Ciclu negativ!\n");
} else {
for (int i = 1; i < n; i++)
out << (d[i] == INF ? 0:d[i]) << " ";
out << endl;
}
return 0;
}