左上から順番に探索していって、#
のマスのとき「上下左右に隣接するマスのうちどれか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; } } }