質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1504閲覧

C++でAtCoderのMineSweeperを解きたい

hasu_non_sucre

総合スコア9

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/03/28 06:15

前提・実現したいこと

AtCoderにあるMineSweeperを解きたいです。
問題のリンク

発生している問題・エラーメッセージ

どこかのコードに不備があるようでWrongAnswerになってしまいます。

該当のソースコード

C++

1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 int H, W; 6 cin >> H >> W; 7 char s[H][W]; 8 int t[H][W] = {}; 9 10 for (int i = 0; i < H; i++) { 11 for (int j = 0; j < W; j++) { 12 cin >> s[i][j]; 13 } 14 } 15 16 for (int i = 0; i < H; i++) { 17 for (int j = 0; j < W; j++) { 18 if (i == 0) { // 最上段 19 if (j == 0) { // 左端 20 if (s[i][j + 1] == '#') { // 右 21 t[0][0]++; 22 } 23 if (s[i + 1][j] == '#') { // 下 24 t[0][0]++; 25 } 26 if (s[i + 1][j + 1] == '#') { // 右下 27 t[0][0]++; 28 } 29 } 30 if (0 < j && j < (W - 1)) { // 端以外 31 if (s[i][j - 1] == '#') { // 左 32 t[0][j]++; 33 } 34 if (s[i][j + 1] == '#') { // 右 35 t[0][j]++; 36 } 37 if (s[i + 1][j] == '#') { // 下 38 t[0][j]++; 39 } 40 if (s[i + 1][j - 1] == '#') { // 左下 41 t[0][j]++; 42 } 43 if (s[i + 1][j + 1] == '#') { // 右下 44 t[0][j]++; 45 } 46 } 47 if (j == (W - 1)) { // 右端 48 if (s[i][j - 1] == '#') { // 左 49 t[0][W - 1]++; 50 } 51 if (s[i + 1][j] == '#') { // 下 52 t[0][W - 1]++; 53 } 54 if (s[i + 1][j - 1] == '#') { // 左下 55 t[0][W - 1]++; 56 } 57 } 58 } 59 if (0 < i && i < (H - 1)) { // 最上段と最下段以外 60 if (j == 0) { // 左端 61 if (s[i - 1][j] == '#') { // 上 62 t[i][0]++; 63 } 64 if (s[i][j + 1] == '#') { // 右 65 t[i][0]++; 66 } 67 if (s[i + 1][j] == '#') { // 下 68 t[i][0]++; 69 } 70 if (s[i - 1][j + 1] == '#') { // 右上 71 t[i][0]++; 72 } 73 if (s[i + 1][j + 1] == '#') { // 右下 74 t[i][0]++; 75 } 76 } 77 if (0 < j && j < (W - 1)) { // 端以外 78 if (s[i - 1][j] == '#') { // 上 79 t[i][j]++; 80 } 81 if (s[i][j + 1] == '#') { // 右 82 t[i][j]++; 83 } 84 if (s[i + 1][j] == '#') { // 下 85 t[i][j]++; 86 } 87 if (s[i][j - 1] == '#') { // 左 88 t[i][j]++; 89 } 90 if (s[i - 1][j - 1] == '#') { // 左上 91 t[i][j]++; 92 } 93 if (s[i - 1][j + 1] == '#') { // 右上 94 t[i][j]++; 95 } 96 if (s[i + 1][j - 1] == '#') { // 左下 97 t[i][j]++; 98 } 99 if (s[i + 1][j + 1] == '#') { // 右下 100 t[i][j]++; 101 } 102 } 103 if (j == (W - 1)) { // 右端 104 if (s[i - 1][W - 1] == '#') { // 上 105 t[i][W - 1]++; 106 } 107 if (s[i][W - 2] == '#') { // 左 108 t[i][W - 1]++; 109 } 110 if (s[i + 1][W - 1] == '#') { // 下 111 t[i][W - 1]++; 112 } 113 if (s[i - 1][W - 2] == '#') { // 左上 114 t[i][W - 1]++; 115 } 116 if (s[i + 1][W - 2] == '#') { // 左下 117 t[i][W - 1]++; 118 } 119 } 120 } 121 if (i == (H - 1)) { // 最下段 122 if (j == 0) { // 左端 123 if (s[H - 2][j] == '#') { // 上 124 t[H - 1][j]++; 125 } 126 if (s[H - 1][j + 1] == '#') { // 右 127 t[H - 1][j]++; 128 } 129 if (s[H - 2][j + 1] == '#') { // 右上 130 t[H - 1][j]++; 131 } 132 } 133 if (0 < j && j < (W - 1)) { // 端以外 134 if (s[H - 1][j - 1] == '#') { // 左 135 t[H - 1][j]++; 136 } 137 if (s[H - 2][j] == '#') { // 上 138 t[H - 1][j]++; 139 } 140 if (s[H - 1][j + 1] == '#') { // 右 141 t[H - 1][j]++; 142 } 143 if (s[H - 2][j - 1] == '#') { // 左上 144 t[H - 1][j]++; 145 } 146 if (s[H - 2][j + 1] == '#') { // 右上 147 t[H - 1][j]++; 148 } 149 } 150 if (j == (W - 1)) { // 右端 151 if (s[H - 2][W - 1] == '#') { // 上 152 t[H - 1][W - 1]++; 153 } 154 if (s[H - 1][W - 2] == '#') { // 左 155 t[H - 1][W - 1]++; 156 } 157 if (s[H - 2][W - 2] == '#') { // 左上 158 t[H - 1][W - 1]++; 159 } 160 } 161 } 162 } 163 } 164 for (int i = 0; i < H; i++) { 165 for (int j = 0; j < W; j++) { 166 if (s[i][j] == '#') { 167 cout << s[i][j]; 168 } else { 169 cout << t[i][j]; 170 } 171 } 172 cout << endl; 173 } 174} 175

試したこと

配列について調べたりしてみましたが, 直りませんでした。

補足情報(FW/ツールのバージョンなど)

Editor:Atom

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

枠外の判定が誤っています。
そのため

2 1 . #

1 2 .#

で誤った結果を出しています。


それとHが1の場合は以下の両方に入りますね。

C++

1if (i == 0) { // 最上段 2if (i == (H - 1)) { // 最下段

投稿2020/03/28 08:39

編集2020/03/28 10:45
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hasu_non_sucre

2020/03/28 11:50 編集

そういうことだったんですね! Sample入力では問題なかったのでなぜなのかほんとにわからなかったので助かりました! ありがとうございました!! ifでH,Wがそれぞれ1だった時について分けて書きました!なにからなにまでありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問