Problem p03361 (C++)

Buggy submission (status: Runtime Error):
#include <array>
#include <iostream>
#include <string>
#include <vector>
int main() {
  int H, W;
  std::cin >> H >> W;

  std::vector<std::string> s;
  std::string ss;
  for (int i = 0; i < W; i++) {
    std::cin >> ss;
    s.push_back(ss);
  }
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {

      if (i == 0 && j == 0) { // 左上角
        if (s[i][j] == '#') {
          if (s[i + 1][j] != '#' && s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == 0 && j == W - 1) { // 右上角
        if (s[i][j] == '#') {
          if (s[i + 1][j] != '#' && s[i][j - 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == H - 1 && j == 0) { // 左下角
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == H - 1 && j == W - 1) { // 右下角
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i][j - 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == 0) { // 上壁
        if (s[i][j] == '#') {

          if (s[i + 1][j] != '#' && s[i][j + 1] != '#' && s[i][j - 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == H - 1) { // 下壁
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i][j - 1] != '#' && s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (j == 0) { // 左壁
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i + 1][j] != '#' && s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (j == W - 1) { // 右壁
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i + 1][j] != '#' && s[i][j - 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else {
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i + 1][j] != '#' && s[i][j - 1] != '#' &&
              s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      }
    }
  }
  std::cout << "Yes" << std::endl;

  return 0;
}


Fixed submission:
#include <array>
#include <iostream>
#include <string>
#include <vector>
int main() {
  int H, W;
  std::cin >> H >> W;

  std::vector<std::string> s;
  std::string ss;
  for (int i = 0; i < H; i++) {
    std::cin >> ss;
    s.push_back(ss);
  }
  for (int i = 0; i < H; i++) {
    for (int j = 0; j < W; j++) {

      if (i == 0 && j == 0) { // 左上角
        if (s[i][j] == '#') {
          if (s[i + 1][j] != '#' && s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == 0 && j == W - 1) { // 右上角
        if (s[i][j] == '#') {
          if (s[i + 1][j] != '#' && s[i][j - 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == H - 1 && j == 0) { // 左下角
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == H - 1 && j == W - 1) { // 右下角
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i][j - 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == 0) { // 上壁
        if (s[i][j] == '#') {

          if (s[i + 1][j] != '#' && s[i][j + 1] != '#' && s[i][j - 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (i == H - 1) { // 下壁
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i][j - 1] != '#' && s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (j == 0) { // 左壁
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i + 1][j] != '#' && s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else if (j == W - 1) { // 右壁
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i + 1][j] != '#' && s[i][j - 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      } else {
        if (s[i][j] == '#') {

          if (s[i - 1][j] != '#' && s[i + 1][j] != '#' && s[i][j - 1] != '#' &&
              s[i][j + 1] != '#') {
            std::cout << "No" << std::endl;
            return 0;
          }
        }
      }
    }
  }
  std::cout << "Yes" << std::endl;

  return 0;
}