private static string[,] SolveLabyrinth(string[,] labyrinth) { int startX = 0; int startY = 0; if (GetEntryPoint(labyrinth, out startX, out startY)) { Queue<MatrixItem> q = new Queue<MatrixItem>(); labyrinth[startX, startY] = "0"; MatrixItem item = new MatrixItem(startX, startY, int.Parse(labyrinth[startX, startY])); q.Enqueue(item); while (q.Count > 0) { MatrixItem newItem = new MatrixItem(q.Dequeue()); labyrinth[newItem.X, newItem.Y] = newItem.Value.ToString(); newItem.Value++; if (((newItem.X - 1) >= 0) && (labyrinth[newItem.X-1, newItem.Y] == "0")) { MatrixItem itemOne = new MatrixItem(newItem.X-1, newItem.Y, newItem.Value); q.Enqueue(itemOne); } if ((newItem.X + 1 < labyrinth.GetLength(0)) && (labyrinth[newItem.X+1, newItem.Y] == "0")) { MatrixItem itemTwo = new MatrixItem(newItem.X + 1, newItem.Y, newItem.Value); q.Enqueue(itemTwo); } if ((newItem.Y - 1 >= 0) && (labyrinth[newItem.X, newItem.Y-1] == "0")) { MatrixItem itemThree = new MatrixItem(newItem.X, newItem.Y-1, newItem.Value); q.Enqueue(itemThree); } if ((newItem.Y + 1 < labyrinth.GetLength(1)) && (labyrinth[newItem.X, newItem.Y+1] == "0")) { MatrixItem itemFour = new MatrixItem(newItem.X, newItem.Y+1, newItem.Value); q.Enqueue(itemFour); } } labyrinth[startX, startY] = "*"; UnreachableCellsCalc(labyrinth); } else { throw new ArgumentException("No entry point"); } return labyrinth; }
public MatrixItem(MatrixItem m) { this.X = m.X; this.Y = m.Y; this.Value = m.Value; }