Example 1: java djikstra's algorithm
import java.util.*;
public class DPQ {
private int dist[];
private Set<Integer> settled;
private PriorityQueue<Node> pq;
private int V;
List<List<Node> > adj;
public DPQ(int V)
{
this.V = V;
dist = new int[V];
settled = new HashSet<Integer>();
pq = new PriorityQueue<Node>(V, new Node());
}
public void dijkstra(List<List<Node> > adj, int src)
{
this.adj = adj;
for (int i = 0; i < V; i++)
dist[i] = Integer.MAX_VALUE;
pq.add(new Node(src, 0));
dist[src] = 0;
while (settled.size() != V) {
int u = pq.remove().node;
settled.add(u);
e_Neighbours(u);
}
}
private void e_Neighbours(int u)
{
int edgeDistance = -1;
int newDistance = -1;
for (int i = 0; i < adj.get(u).size(); i++) {
Node v = adj.get(u).get(i);
if (!settled.contains(v.node)) {
edgeDistance = v.cost;
newDistance = dist[u] + edgeDistance;
if (newDistance < dist[v.node])
dist[v.node] = newDistance;
pq.add(new Node(v.node, dist[v.node]));
}
}
}
public static void main(String arg[])
{
int V = 5;
int source = 0;
List<List<Node> > adj = new ArrayList<List<Node> >();
for (int i = 0; i < V; i++) {
List<Node> item = new ArrayList<Node>();
adj.add(item);
}
adj.get(0).add(new Node(1, 9));
adj.get(0).add(new Node(2, 6));
adj.get(0).add(new Node(3, 5));
adj.get(0).add(new Node(4, 3));
adj.get(2).add(new Node(1, 2));
adj.get(2).add(new Node(3, 4));
DPQ dpq = new DPQ(V);
dpq.dijkstra(adj, source);
System.out.println("The shorted path from node :");
for (int i = 0; i < dpq.dist.length; i++)
System.out.println(source + " to " + i + " is "
+ dpq.dist[i]);
}
}
class Node implements Comparator<Node> {
public int node;
public int cost;
public Node()
{
}
public Node(int node, int cost)
{
this.node = node;
this.cost = cost;
}
@Override
public int compare(Node node1, Node node2)
{
if (node1.cost < node2.cost)
return -1;
if (node1.cost > node2.cost)
return 1;
return 0;
}
}
Example 2: dijkstra algorithm
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll minDist(ll dist[], ll n, bool visited[])
{
ll min = INT_MAX;
ll minIndex = 0;
for (ll i = 1; i <= n; i++)
{
if (!visited[i] && dist[i] <= min)
{
min = dist[i];
minIndex = i;
}
}
return minIndex;
}
void djikstra(vector<pair<ll, ll>> *g, ll n, ll src)
{
bool visited[n + 1];
ll dist[n + 1];
for (ll i = 0; i <= n; i++)
{
dist[i] = INT_MAX;
visited[i] = false;
}
dist[src] = 0;
for (ll i = 0; i < n - 1; i++)
{
ll u = minDist(dist, n, visited);
visited[u] = true;
for (ll v = 0; v < g[u].size(); v++)
{
if (dist[u] + g[u][v].second < dist[g[u][v].first])
{
dist[g[u][v].first] = dist[u] + g[u][v].second;
}
}
}
cout << "VERTEX : DISTANCE" << endl;
for (ll i = 1; i <= n; i++)
{
if (dist[i] != INT_MAX)
cout << i << " " << dist[i] << endl;
else
cout << i << " "
<< "not reachable" << endl;
}
cout << endl;
}
int main()
{
vector<pair<ll, ll>> *graph;
ll n, e, x, y, w, src;
cout << "Enter number of vertices and edges in the graph" << endl;
cin >> n >> e;
graph = new vector<pair<ll, ll>>[n + 1];
cout << "Enter edges and weight" << endl;
for (ll i = 0; i < e; i++)
{
cin >> x >> y >> w;
if (x <= 0 || y <= 0 || w <= 0)
{
cout << "Invalid parameters. Exiting" << endl;
exit(-1);
}
graph[x].push_back(make_pair(y, w));
graph[y].push_back(make_pair(x, w));
}
cout << "Enter source from which you want to find shortest paths" << endl;
cin >> src;
if (src >= 1 && src <= n)
djikstra(graph, n, src);
else
cout << "Please enter a valid vertex as the source" << endl;
return 0;
}
Example 3: dijkstra's algorithm
# Providing the graph
n = int(input("Enter the number of vertices of the graph"))
# using adjacency matrix representation
vertices = [[0, 0, 1, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 1, 0],
[1, 1, 0, 1, 1, 0, 0],
[1, 0, 1, 0, 0, 0, 1],
[0, 0, 1, 0, 0, 1, 0],
[0, 1, 0, 0, 1, 0, 1],
[0, 0, 0, 1, 0, 1, 0]]
edges = [[0, 0, 1, 2, 0, 0, 0],
[0, 0, 2, 0, 0, 3, 0],
[1, 2, 0, 1, 3, 0, 0],
[2, 0, 1, 0, 0, 0, 1],
[0, 0, 3, 0, 0, 2, 0],
[0, 3, 0, 0, 2, 0, 1],
[0, 0, 0, 1, 0, 1, 0]]
# Find which vertex is to be visited next
def to_be_visited():
global visited_and_distance
v = -10
for index in range(num_of_vertices):
if visited_and_distance[index][0] == 0 \
and (v < 0 or visited_and_distance[index][1] <=
visited_and_distance[v][1]):
v = index
return v
num_of_vertices = len(vertices[0])
visited_and_distance = [[0, 0]]
for i in range(num_of_vertices-1):
visited_and_distance.append([0, sys.maxsize])
for vertex in range(num_of_vertices):
# Find next vertex to be visited
to_visit = to_be_visited()
for neighbor_index in range(num_of_vertices):
# Updating new distances
if vertices[to_visit][neighbor_index] == 1 and
visited_and_distance[neighbor_index][0] == 0:
new_distance = visited_and_distance[to_visit][1]
+ edges[to_visit][neighbor_index]
if visited_and_distance[neighbor_index][1] > new_distance:
visited_and_distance[neighbor_index][1] = new_distance
visited_and_distance[to_visit][0] = 1
i = 0
# Printing the distance
for distance in visited_and_distance:
print("Distance of ", chr(ord('a') + i),
" from source vertex: ", distance[1])
i = i + 1