Exemple #1
0
        static void Main(string[] args)
        {
            int[] rc  = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            int[] syx = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            int[] gyx = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();

            for (int i = 0; i < rc[0]; i++)
            {
                List <BlockClass> tmpList = new List <BlockClass>();
                Maze.Add(tmpList);
                string line = Console.ReadLine();

                for (int j = 0; j < rc[1]; j++)
                {
                    BlockClass tmpBlock = new BlockClass();
                    tmpList.Add(tmpBlock);
                    tmpBlock.x = i;
                    tmpBlock.y = j;
                    if (line[j] == '.')
                    {
                        tmpBlock.isRoad = true;
                    }
                    else
                    {
                        tmpBlock.isRoad = false;
                    }
                }
            }

            Maze[gyx[0] - 1][gyx[1] - 1].isGoal = true;
            Maze[syx[0] - 1][syx[1] - 1].Min    = 0;
            Queue.Add(Maze[syx[0]][syx[1]]);
            BFS(syx[0] - 1, syx[1] - 1);

            //
        }
Exemple #2
0
        static void Main(string[] args)
        {
            int[] hw = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();

            List <BlockClass> list0 = new List <BlockClass>();

            Maze.Add(list0);
            for (int i = 0; i < hw[1] + 2; i++)
            {
                BlockClass tmpBlock = new BlockClass();
                list0.Add(tmpBlock);
                tmpBlock.x      = 0;
                tmpBlock.y      = i;
                tmpBlock.isRoad = false;
            }

            for (int i = 1; i <= hw[0]; i++)
            {
                List <BlockClass> tmpList = new List <BlockClass>();
                Maze.Add(tmpList);
                string line = Console.ReadLine();
                line = "#" + line + "#";

                for (int j = 0; j <= hw[1] + 1; j++)
                {
                    BlockClass tmpBlock = new BlockClass();
                    tmpList.Add(tmpBlock);
                    tmpBlock.x = i;
                    tmpBlock.y = j;
                    if (line[j] == '.')
                    {
                        tmpBlock.isRoad = true; counter++;
                    }
                    else
                    {
                        tmpBlock.isRoad = false;
                    }
                }
            }

            List <BlockClass> listlist = new List <BlockClass>();

            Maze.Add(listlist);
            for (int i = 0; i < hw[1] + 2; i++)
            {
                BlockClass tmpBlock = new BlockClass();
                listlist.Add(tmpBlock);
                tmpBlock.x      = hw[0] + 1;
                tmpBlock.y      = i;
                tmpBlock.isRoad = false;
            }

            Maze[hw[0]][hw[1]].isGoal = true;
            Maze[1][1].Min            = 0;
            Queue.Add(Maze[1][1]);
            BFS(1, 1);


            if (Maze[hw[0]][hw[1]].Min == -1)
            {
                Console.WriteLine(-1);
            }
            else
            {
                Console.WriteLine(counter - Maze[hw[0]][hw[1]].Min - 1);
            }

            //
        }