回答編集履歴

1

d

2019/02/10 14:26

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -1,33 +1,137 @@
1
+ 少なくとも例題にあった入力例では、3と表示されましたよ。
2
+
3
+
4
+
1
5
  ```cpp
6
+
7
+ #include <iostream>
8
+
9
+ using namespace std;
10
+
11
+ const int MAX_N = 100;
12
+
13
+ const int MAX_M = 100;
14
+
15
+ //int N, M;
16
+
17
+ //char field[MAX_N][MAX_M + 1]; //庭
18
+
19
+
20
+
21
+ static const int N = 10, M = 12;
22
+
23
+ char field[N][M] = {
24
+
25
+ {'W', '.', '.', '.', '.', '.', '.', '.', '.', 'W', 'W', '.'},
26
+
27
+ {'.', 'W', 'W', 'W', '.', '.', '.', '.', '.', 'W', 'W', 'W'},
28
+
29
+ {'.', '.', '.', '.', 'W', 'W', '.', '.', '.', 'W', 'W', '.'},
30
+
31
+ {'.', '.', '.', '.', '.', '.', '.', '.', '.', 'W', 'W', '.'},
32
+
33
+ {'.', '.', '.', '.', '.', '.', '.', '.', '.', 'W', '.', '.'},
34
+
35
+ {'.', '.', 'W', '.', '.', '.', '.', '.', '.', 'W', '.', '.'},
36
+
37
+ {'.', 'W', '.', 'W', '.', '.', '.', '.', '.', 'W', 'W', '.'},
38
+
39
+ {'W', '.', 'W', '.', 'W', '.', '.', '.', '.', '.', 'W', '.'},
40
+
41
+ {'.', 'W', '.', 'W', '.', '.', '.', '.', '.', '.', 'W', '.'},
42
+
43
+ {'.', '.', 'W', '.', '.', '.', '.', '.', '.', '.', 'W', '.'},
44
+
45
+ };
46
+
47
+
48
+
49
+ //現在位置(x,y)
50
+
51
+ void dfs(int x, int y)
52
+
53
+ {
54
+
55
+ //今いるところを、.に置き換える
56
+
57
+ field[x][y] = '.';
58
+
59
+
60
+
61
+ //移動する8方向について,ループする
62
+
63
+ for (int dx = -1; dx <= 1; dx++) {
64
+
65
+ for (int dy = -1; dy <= 1; dy++) {
66
+
67
+ // x方向にdx, y方向にdy 移動した場所を(nx,ny)とする
68
+
69
+ int nx = x + dx, ny = y + dy;
70
+
71
+
72
+
73
+ // nxとnyが水たまりかどうか、またfield[nx][ny]が水たまりかどうかを特定する
74
+
75
+ if (0 <= nx && nx < N && 0 <= nx && ny < M && field[nx][ny] == 'W')
76
+
77
+ dfs(nx, ny);
78
+
79
+ }
80
+
81
+ }
82
+
83
+ return;
84
+
85
+ }
86
+
87
+ void solve()
88
+
89
+ {
90
+
91
+ int res = 0;
92
+
93
+ for (int i = 0; i < N; i++) {
94
+
95
+ for (int j = 0; j < M; j++) {
96
+
97
+ if (field[i][j] == 'W') {
98
+
99
+ // Wが残っているなら、そこからdfsを始める
100
+
101
+ dfs(i, j);
102
+
103
+ res++;
104
+
105
+ }
106
+
107
+ }
108
+
109
+ }
110
+
111
+ std::cout << res << std::endl;
112
+
113
+ }
2
114
 
3
115
  int main()
4
116
 
5
117
  {
6
118
 
7
- cin >> N >> M;
119
+ // cin >> N >> M;
8
120
 
9
- for (int i = 0; i < N; i++)
121
+ // for (int i = 0; i < N; i++) {
10
122
 
11
- {
123
+ // for (int j = 0; j < M; j++) {
12
124
 
13
- for (int j = 0; j < M; j++)
125
+ // cin >> field[i][j];
14
126
 
15
- {
127
+ // }
16
128
 
17
- cin >> field[i][j];
129
+ // }
18
-
19
- }
20
-
21
- }
22
-
23
- return 0;
24
130
 
25
131
  solve();
26
132
 
27
133
  }
28
134
 
29
- ```
30
135
 
31
136
 
32
-
33
- solve() の前に return してるので、solve() がそもそも呼ばれてないと思いますが。
137
+ ```