コード例 #1
0
        //?????
        private void Solve()
        {
            H  = ReadInt;
            W  = ReadInt;
            gx = W - 1;
            gy = H - 1;

            maze = new bool[H][];
            dist = new int[W][];
            for (int i = 0; i < W; i++)
            {
                dist[i] = new int[H];
                for (int j = 0; j < H; j++)
                {
                    dist[i][j] = INF;
                }
            }
            for (int i = 0; i < H; i++)
            {
                maze[i] = ReadStr.Select(x => x == '.').ToArray();
            }
            var white_count = maze.SelectMany(x => x).Count(x => x);

            bfs();
            if (dist[gx][gy] == INF)
            {
                Console.WriteLine(-1);
                return;
            }

            Console.WriteLine(white_count - dist[gx][gy] - 1);
        }
コード例 #2
0
        //?????
        private void Solve()
        {
            c = new bool[H][];
            for (int i = 0; i < H; i++)
            {
                c[i] = ReadStr.Select(x => x == 'o').ToArray();
            }

            for (int y = 0; y < 10; y++)
            {
                for (int x = 0; x < 10; x++)
                {
                    visited = new bool[H][];
                    for (int i = 0; i < H; i++)
                    {
                        visited[i] = new bool[W];
                    }

                    if (!c[y][x])
                    {
                        c[y][x] = true;
                        dfs(x, y);

                        ans = true;
                        for (int i = 0; i < 10; i++)
                        {
                            for (int j = 0; j < 10; j++)
                            {
                                if (visited[i][j] != c[i][j])
                                {
                                    ans = false;
                                    break;
                                }
                            }

                            if (!ans)
                            {
                                break;
                            }
                        }

                        c[y][x] = false;
                    }

                    if (ans)
                    {
                        Console.WriteLine("YES");
                        return;
                    }
                }
            }

            Console.WriteLine("NO");
        }
コード例 #3
0
        //?????
        private void Solve()
        {
            R    = ReadInt;
            C    = ReadInt;
            sy   = ReadInt - 1;
            sx   = ReadInt - 1;
            gy   = ReadInt - 1;
            gx   = ReadInt - 1;
            maze = new bool[R][];
            dist = new int[R][];
            for (int i = 0; i < R; i++)
            {
                maze[i] = ReadStr.Select(x => x == '.').ToArray();
                dist[i] = new int[C];
                for (int j = 0; j < C; j++)
                {
                    dist[i][j] = INF;
                }
            }

            Console.WriteLine(bfs());
        }