using
System;
class
GFG
{
static
int
INFINITE = 10000;
static
void
shortestPathLength(
int
n,
int
[,]graph,
int
[,]dis)
{
for
(
int
i = 0; i < n; i++)
{
for
(
int
j = 0; j < n; j++)
{
dis[i, j] = graph[i, j];
}
}
for
(
int
k = 0; k < n; k++)
{
for
(
int
i = 0; i < n; i++)
{
for
(
int
j = 0; j < n; j++)
{
dis[i, j] = Math.Min(dis[i, j],
dis[i, k] +
dis[k, j]);
}
}
}
}
static
void
checkShortestPath(
int
length,
int
[]path,
int
[,]dis)
{
if
(dis[path[0] - 1, path[length - 1] - 1] == length - 1)
{
Console.WriteLine(
"YES"
);
}
else
{
Console.WriteLine(
"NO"
);
}
}
public
static
void
Main(String[] args)
{
int
n = 4;
int
[,]graph = { { 0, 1, 1, INFINITE },
{ INFINITE, 0, 1, INFINITE },
{ INFINITE, INFINITE, 0, 1 },
{ 1, INFINITE, INFINITE, 0 } };
int
[,]dis =
new
int
[n, n];
shortestPathLength(n, graph, dis);
int
[]path1 = { 1, 2, 3, 4 };
checkShortestPath(n, path1, dis);
int
[]path2 = { 1, 3, 4 };
checkShortestPath(3, path2, dis);
}
}