import java.io.*;
import java.util.*;
class GFG {
static 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;
}
}
static void addEdge(ArrayList<ArrayList<Node> > adj,
int x, int y, int w)
{
adj.get(x).add(new Node(y, w));
adj.get(y).add(new Node(x, w));
}
static void dijkstra(ArrayList<ArrayList<Node> > adj,
int src, int n, int dist[],
int paths[])
{
PriorityQueue<Node> pq
= new PriorityQueue<Node>(n + 1, new Node());
Set<String> settled = new HashSet<String>();
pq.add(new Node(src, 0));
dist[src] = 0;
paths[src] = 1;
while (!pq.isEmpty()) {
int u = pq.peek().node;
int d = pq.peek().cost;
pq.poll();
for (int i = 0; i < adj.get(u).size(); i++) {
int to = adj.get(u).get(i).node;
int cost = adj.get(u).get(i).cost;
if (settled.contains(to + " " + u))
continue;
if (dist[to] > dist[u] + cost) {
pq.add(new Node(to, d + cost));
dist[to] = dist[u] + cost;
paths[to] = paths[u];
}
else if (dist[to] == dist[u] + cost) {
paths[to] = (paths[to] + paths[u]);
}
settled.add(to + " " + u);
}
}
}
static void
findShortestPaths(ArrayList<ArrayList<Node> > adj,
int s, int n)
{
int[] dist = new int[n + 5];
int[] paths = new int[n + 5];
for (int i = 0; i <= n; i++)
dist[i] = Integer.MAX_VALUE;
for (int i = 0; i <= n; i++)
paths[i] = 0;
dijkstra(adj, s, n, dist, paths);
System.out.print("Shortest Paths distances are : ");
for (int i = 1; i <= n; i++) {
System.out.print(dist[i] + " ");
}
System.out.println();
System.out.print(
"Numbers of the shortest Paths are: ");
for (int i = 1; i <= n; i++)
System.out.print(paths[i] + " ");
}
public static void main(String[] args)
{
int N = 9;
int M = 14;
ArrayList<ArrayList<Node> > adj = new ArrayList<>();
for (int i = 0; i <= N; i++) {
adj.add(new ArrayList<Node>());
}
addEdge(adj, 1, 2, 1);
addEdge(adj, 2, 3, 1);
addEdge(adj, 3, 4, 2);
addEdge(adj, 4, 5, 1);
addEdge(adj, 5, 6, 2);
addEdge(adj, 6, 7, 2);
addEdge(adj, 7, 8, 1);
addEdge(adj, 8, 1, 1);
addEdge(adj, 2, 8, 2);
addEdge(adj, 3, 9, 1);
addEdge(adj, 8, 9, 2);
addEdge(adj, 7, 9, 2);
addEdge(adj, 3, 6, 1);
addEdge(adj, 4, 6, 1);
findShortestPaths(adj, 1, N);
}
}
Original page link
Best Cool Tech Gadgets
Top favorite technology gadgets
0 comments:
Post a Comment