A
#include <iostream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
void dijkstra(int src, int n, vector<vector<pair<int, int>>>& graph) {
vector<int> dist(n, INT_MAX);
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;
dist[src] = 0;
pq.push({0, src});
while (!pq.empty()) {
auto [d, u] = pq.top(); pq.pop();
if (d > dist[u]) continue;
for (auto [v, w] : graph[u]) {
if (dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
pq.push({dist[v], v});
cout << "Dijkstra Shortest Distances:\n";
for (int i = 0; i < n; ++i) {
cout << "Vertex " << i << " -> Distance " << dist[i] << endl;
}
int main() {
int n = 5;
vector<vector<pair<int, int>>> graph(n);
graph[0].push_back({1, 10});
graph[0].push_back({4, 3});
graph[1].push_back({2, 2});
graph[2].push_back({3, 9});
graph[4].push_back({1, 1});
graph[4].push_back({2, 4});
dijkstra(0, n, graph);
return 0;
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
void bellmanFord(int src, int n, vector<vector<int>>& edges) {
vector<int> dist(n, INT_MAX);
dist[src] = 0;
for (int i = 1; i < n; ++i) { // Relax all edges V-1 times
for (auto& edge : edges) {
int u = edge[0], v = edge[1], w = edge[2];
if (dist[u] != INT_MAX && dist[u] + w < dist[v]) {
dist[v] = dist[u] + w;
// Check for negative weight cycles
for (auto& edge : edges) {
int u = edge[0], v = edge[1], w = edge[2];
if (dist[u] != INT_MAX && dist[u] + w < dist[v]) {
cout << "Graph contains a negative weight cycle\n";
return;
cout << "Bellman-Ford Shortest Distances:\n";
for (int i = 0; i < n; ++i) {
cout << "Vertex " << i << " -> Distance " << dist[i] << endl;
int main() {
int n = 5;
vector<vector<int>> edges = {
{0, 1, 10}, {0, 4, 3}, {1, 2, 2}, {2, 3, 9}, {4, 1, 1}, {4, 2, 4}
};
bellmanFord(0, n, edges);
return 0;