bellman ford algorithm using stl code example
Example 1: bellman ford algorithm cp algorithm
struct edge
{
int a, b, cost;
};
int n, m, v;
vector<edge> e;
const int INF = 1000000000;
void solve()
{
vector<int> d (n, INF);
d[v] = 0;
for (int i=0; i<n-1; ++i)
for (int j=0; j<m; ++j)
if (d[e[j].a] < INF)
d[e[j].b] = min (d[e[j].b], d[e[j].a] + e[j].cost);
}
Example 2: bellman ford algorithm
#include <vector>
#include <iostream>
using namespace std;
#define INF 99999;
struct Edge {
int u, v, w;
};
int V;
vector<vector<Edge>> adjList;
vector<vector<int>> adjMatrix;
int* shortestPath(int src) {
int dist[V];
for (int u = 0; u < V; ++u)
dist[u] = INF;
dist[src] = 0;
for (int i = 0; i < V - 1; ++i)
for (int u = 0; u < V; ++u)
for (Edge e : adjList[u])
if (dist[e.u] + e.w < dist[e.v])
dist[e.v] = dist[e.u] + e.w;
for (int u = 0; u < V; ++u)
for (Edge e : adjList[u])
if (dist[e.u] + e.w < dist[e.v])
throw std::runtime_error("negative loop detected")
return dist;
}
int* shortestPath(int src) {
int dist[V];
for (int u = 0; u < V; ++u)
dist[u] = INF;
dist[src] = 0;
for (int i = 0; i < V - 1; ++i)
for (int u = 0; u < V; ++u)
for (int v = 0; v < V; ++v)
if (dist[u] + adjMatrix[u][v] < dist[v])
dist[v] = dist[u] + adjMatrix[u][v];
for (int u = 0; u < V; ++u)
for (int v = 0; v < V; ++v)
if (dist[u] + adjMatrix[u][v] < dist[v])
throw std::runtime_error("negative loop detected")
return dist;
}