using
System;
using
System.Collections.Generic;
class
GFG
{
static
void
BFS(List<
int
>[] adj,
int
src,
int
[]dist,
int
[]paths,
int
n)
{
bool
[] visited =
new
bool
[n];
for
(
int
i = 0; i < n; i++)
visited[i] =
false
;
dist[src] = 0;
paths[src] = 1;
List<
int
> q =
new
List<
int
>();
q.Add(src);
visited[src] =
true
;
while
(q.Count != 0)
{
int
curr = q[0];
q.RemoveAt(0);
foreach
(
int
x
in
adj[curr])
{
if
(visited[x] ==
false
)
{
q.Add(x);
visited[x] =
true
;
}
if
(dist[x] > dist[curr] + 1)
{
dist[x] = dist[curr] + 1;
paths[x] = paths[curr];
}
else
if
(dist[x] == dist[curr] + 1)
paths[x] += paths[curr];
}
}
}
static
void
findShortestPaths(List<
int
> []adj,
int
s,
int
n)
{
int
[] dist =
new
int
[n], paths =
new
int
[n];
for
(
int
i = 0; i < n; i++)
dist[i] =
int
.MaxValue;
for
(
int
i = 0; i < n; i++)
paths[i] = 0;
BFS(adj, s, dist, paths, n);
Console.Write(
"Numbers of shortest Paths are: "
);
for
(
int
i = 0; i < n; i++)
Console.Write(paths[i] +
" "
);
}
static
void
addEdge(List<
int
> []adj,
int
u,
int
v)
{
adj[u].Add(v);
}
public
static
void
Main(String[] args)
{
int
n = 7;
List<
int
>[] adj =
new
List<
int
>[n];
for
(
int
i = 0; i < n; i++)
adj[i] =
new
List<
int
>();
addEdge(adj, 0, 1);
addEdge(adj, 0, 2);
addEdge(adj, 1, 2);
addEdge(adj, 1, 3);
addEdge(adj, 2, 3);
addEdge(adj, 3, 4);
addEdge(adj, 3, 5);
addEdge(adj, 4, 6);
addEdge(adj, 5, 6);
findShortestPaths(adj, 0, 7);
}
}