using System;
class GFG{
static int filter( int x, int y, int z)
{
if (x != -1 && y != -1)
{
return z;
}
return x == -1 ? y : x;
}
static int samePathUtil( int [,]mtrx, int vrtx,
int v1, int v2, int i)
{
int ans = -1;
if (i == v1 || i == v2)
return i;
for ( int j = 0; j < vrtx; j++)
{
if (mtrx[i,j] == 1)
{
ans = filter(ans, samePathUtil(
mtrx, vrtx, v1,
v2, j), i);
}
}
return ans;
}
static bool isVertexAtSamePath( int [,]mtrx,
int vrtx, int v1,
int v2, int i)
{
int lca = samePathUtil(mtrx, vrtx, v1 - 1,
v2 - 1, i);
if (lca == v1 - 1 || lca == v2 - 1)
return true ;
return false ;
}
public static void Main(String[] args)
{
int vrtx = 7;
int [,]mtrx = { { 0, 1, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 1 },
{ 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0 } };
int v1 = 1, v2 = 5;
if (isVertexAtSamePath(mtrx, vrtx,
v1, v2, 0))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|