using System.Collections.Generic;
public Node(int x, int y, int steps)
public static int MinimumSteps(bool[][] matrix, int[] startPoints, int[] endPoints)
int[][] dirs = new int[][]{new int[]{1, 0}, new int[]{-1, 0}, new int[]{0, 1}, new int[]{0, -1}};
Queue<Node> queue = new Queue<Node>();
queue.Enqueue(new Node(startPoints[0], startPoints[1], 0));
Node node = queue.Dequeue();
if (node.x == endPoints[0] && node.y == endPoints[1])
foreach (int[] dir in dirs)
if (x >= 0 && x < matrix.Length && y >= 0 && y < matrix[0].Length)
if (matrix[x][y] == false)
queue.Enqueue(new Node(x, y, node.steps + 1));
public static void Main()
Console.WriteLine(MinimumSteps(new bool[][]{new bool[]{false, false, false, false}, new bool[]{true, true, false, true}, new bool[]{false, false, false, false}, new bool[]{false, false, false, false}}, new int[]{3, 0}, new int[]{0, 0}));