質問編集履歴

1 誤字を修正いたしました。

hon.ki

hon.ki score 13

2019/02/10 22:07  投稿

C++で競技プログラミング BFS 論理エラーの特定について
C++で競技プログラミング DFS 論理エラーの特定について
http://poj.org/problem?id=2386の問題を、蟻本のp36をみながら解いておりましたところ、次のような論理エラーが起こりました。
input:
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
期待するoutput
3
実際のoutput
(出力なし)
```ここに言語を入力
#include <iostream>
using namespace std;
const int MAX_N = 100;
const int MAX_M = 100;
int N, M;
char field[MAX_N][MAX_M + 1]; //庭
//現在位置(x,y)
void dfs(int x, int y)
{
//今いるところを、.に置き換える
field[x][y] = '.';
//移動する8方向について,ループする
for (int dx = -1; dx <= 1; dx++)
{
for (int dy = -1; dy <= 1; dy++)
{
//x方向にdx, y方向にdy 移動した場所を(nx,ny)とする
int nx = x + dx, ny = y + dy;
//nxとnyが水たまりかどうか、またfield[nx][ny]が水たまりかどうかを特定する
if (0 <= nx && nx < N && 0 <= nx && ny < M && field[nx][ny] == 'W')
dfs(nx, ny);
}
}
return;
}
void solve()
{
int res = 0;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
if (field[i][j] == 'W')
{
//Wが残っているなら、そこからdfsを始める
dfs(i, j);
res++;
//cout << res << endl;
}
}
}
//cout << res << endl;
}
int main()
{
cin >> N >> M;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cin >> field[i][j];
}
}
return 0;
solve();
}
```
<試してみたこと>
入力の受け取りの後(57行目)に、
```ここに言語を入力
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cout << field[i][j]<<endl;
}
}
```
としたところ、
W........WW..WWW.....WWW....WW...WW..........WW..........W....W......W...W.W.....WW.W.W.W.....W..W.W......W...W.......W.
という出力がありました。このことから、入出力に問題はない考えました。
solve関数の中に問題があるのではと考え、コメントアウトした2箇所で変数resを出力してみましたが、いずれも出力は何もされませんでした。といって、条件式を確認しましたが、間違っているところはわかりませんでした。
なお、ローカル環境とは、mac OS High Sierra10.13.6
コンパイラは
Apple LLVM version 10.0.0 (clang-1000.10.44.4)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
になります。デフォルトのC++14で、コンパイルしました。
VSCodeを使っています。
凡ミスである可能性が高いと思うのですが、どうしてもわからず、質問させていただきました。どうぞよろしくお願いいたします。
  • C++

    5154 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る