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