回答編集履歴

2

リファクタ

2017/07/04 14:36

投稿

kiichi54321
kiichi54321

スコア1984

test CHANGED
@@ -24,23 +24,15 @@
24
24
 
25
25
  {
26
26
 
27
- if (img.GetPixel(x, y) == Black)
27
+ var result = 1;
28
28
 
29
- {
30
-
31
- dic.Add((x,y),1);
29
+ if (img.GetPixel(x, y) != Black)
32
-
33
- return 1;
34
-
35
- }
36
-
37
- else
38
30
 
39
31
  {
40
32
 
41
33
  img.SetPixel(x, y, Black);
42
34
 
43
- var result = (Expansion(y + 1, x) + Expansion(y - 1, x) +
35
+ result = (Expansion(y + 1, x) + Expansion(y - 1, x) +
44
36
 
45
37
  Expansion(y + 1, x + 1) + Expansion(y - 1, x + 1) +
46
38
 
@@ -48,9 +40,11 @@
48
40
 
49
41
  Expansion(y, x + 1) + Expansion(y, x - 1));
50
42
 
51
- dic.Add((x,y),result);
43
+ }
52
44
 
45
+ dic.Add((x,y),result);
46
+
53
- }
47
+ return result;
54
48
 
55
49
  }
56
50
 

1

修正

2017/07/04 14:36

投稿

kiichi54321
kiichi54321

スコア1984

test CHANGED
@@ -1,6 +1,10 @@
1
1
  Expansionを呼び出し過ぎなので、メモ化、Dictionaryにxy座標に対する結果を格納するとかするといいのでは?
2
2
 
3
+ 何度も同じ再帰を繰り返してしまうため、計算が無駄です。
4
+
3
5
  動的計画法とかを勉強してみるといいと思います。
6
+
7
+
4
8
 
5
9
 
6
10
 
@@ -55,3 +59,7 @@
55
59
  }
56
60
 
57
61
  ```
62
+
63
+
64
+
65
+ これなら座標分の計算しかしないので、スタックとかはとりあえず必要ないんじゃないかなぁ。