回答編集履歴

1

2022/01/27 04:33

投稿

fana
fana

スコア11663

test CHANGED
@@ -9,3 +9,40 @@
9
9
  && (map.at(a-1).at(b)=='.' || map.at(a-1).at(b)=='g') //mapへのアクセスを後に
10
10
  )
11
11
  ```
12
+
13
+ ---
14
+
15
+ [追記]
16
+ それはそれとして,
17
+ `find()` は再帰として実装しつつも `stack` とかいう謎の履歴データ(?)っぽいのがあったりして,考えが整理されてない感.
18
+ 再帰でやるならこのくらい↓の話になるのでは?
19
+
20
+ ```C++
21
+ bool find( int H, int W, std::vector< std::vector<char> > &map, int x, int y )
22
+ {
23
+ if( x<0 || y<0 || W<=x || H<=y )return false;
24
+
25
+ char &attr = map[y][x];
26
+ if( attr=='#' || attr=='o' )return false;
27
+
28
+ std::cout << x << ", " << y << std::endl; //output for debug
29
+ if( attr=='g' )return true;
30
+ attr = 'o';
31
+
32
+ return ( find(H,W,map,x,y-1) || find(H,W,map,x-1,y) || find(H,W,map,x+1,y) || find(H,W,map,x,y+1) );
33
+ }
34
+
35
+ int main()
36
+ {
37
+ //※入力部とかは面倒なので省略※
38
+ std::vector< std::vector<char> > map
39
+ {
40
+ { 's', '.', '.' },
41
+ { '.', '#', '#' },
42
+ { '.', '.', '.' },
43
+ { 'g', '.', '.' }
44
+ };
45
+ std::cout << ( find( 4,3,map,0,0 ) ? "Yes" : "No" ) << std::endl;
46
+ return 0;
47
+ }
48
+ ```