Esempio n. 1
0
        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;
        }
Esempio n. 2
0
 public MatrixItem(MatrixItem m)
 {
     this.X = m.X;
     this.Y = m.Y;
     this.Value = m.Value;
 }