ABC096C - Grid Repainting 2

atcoder.jp

左上から順番に探索していって、# のマスのとき「上下左右に隣接するマスのうちどれか1つでも # があるか」をチェックする。# があれば探索を続け、無ければ目標を達成できないので探索終了。

using System;
using System.Collections.Generic;

namespace ABC096C
{
    class Program
    {
        static void Main(string[] args)
        {
            var input=Console.ReadLine().Split(' ');
            var H = int.Parse(input[0]);
            var W = int.Parse(input[1]);
            var s = new List<string>();
            for(var i = 0; i < H; i++)
            {
                s.Add(Console.ReadLine());
            }

            var answer = "Yes";
            for (var x = 0; x < W; x++)
            {
                for (var y = 0; y < H; y++)
                {
                    if (s[y][x] == '#')
                    {
                        if (!CanPaint(s, H, W, x, y))
                        {
                            answer = "No";
                            break;
                        }
                    }
                }
            }
            Console.WriteLine(answer);
        }

        static bool CanPaint(List<string> s, int H, int W,int x, int y)
        {
            if (x > 0 && s[y][x - 1] == '#') return true;
            if (y > 0 && s[y - 1][x] == '#') return true;
            if (x + 1 < W && s[y][x + 1] == '#') return true;
            if (y + 1 < H && s[y + 1][x] == '#') return true;
            return false;
        }
    }
}