using
System;
using
System.Collections.Generic;
using
System.Collections;
class
GFG {
static
int
findLevel(
int
N,
int
[, ] edges,
int
X)
{
int
maxVertex = 0;
for
(
int
i = 0; i < edges.GetLength(0); i++) {
maxVertex = Math.Max(
maxVertex,
Math.Max(edges[i, 0], edges[i, 1]));
}
List<
int
>[] adj =
new
List<
int
>[ maxVertex + 1 ];
for
(
int
i = 0; i <= maxVertex; i++)
adj[i] =
new
List<
int
>();
for
(
int
i = 0; i < edges.GetLength(0); i++) {
adj[edges[i, 0]].Add(edges[i, 1]);
adj[edges[i, 1]].Add(edges[i, 0]);
}
if
(X > maxVertex || adj[X].Count == 0)
return
-1;
Queue q =
new
Queue();
q.Enqueue(0);
int
level = 0;
int
[] visited =
new
int
[maxVertex + 1];
for
(
int
i = 0; i <= maxVertex; i++)
visited[i] = 0;
visited[0] = 1;
while
(q.Count != 0) {
int
sz = q.Count;
while
(sz-- != 0) {
int
currentNode = (
int
)q.Dequeue();
if
(currentNode == X) {
return
level;
}
for
(
int
i = 0; i < adj[currentNode].Count;
i++) {
int
it = adj[currentNode][i];
if
(visited[it] == 0) {
q.Enqueue(it);
visited[it] = 1;
}
}
}
level++;
}
return
-1;
}
static
void
Main()
{
int
V = 5;
int
[, ] edges =
new
int
[, ] {
{ 0, 1 }, { 0, 2 }, { 1, 3 }, { 2, 4 }
};
int
X = 3;
int
level = findLevel(V, edges, X);
Console.Write(level);
}
}