回答編集履歴
2
リファクタ
test
CHANGED
@@ -24,23 +24,15 @@
|
|
24
24
|
|
25
25
|
{
|
26
26
|
|
27
|
-
|
27
|
+
var result = 1;
|
28
28
|
|
29
|
-
{
|
30
|
-
|
31
|
-
|
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
|
-
|
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
|
-
|
43
|
+
}
|
52
44
|
|
45
|
+
dic.Add((x,y),result);
|
46
|
+
|
53
|
-
|
47
|
+
return result;
|
54
48
|
|
55
49
|
}
|
56
50
|
|
1
修正
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
|
+
これなら座標分の計算しかしないので、スタックとかはとりあえず必要ないんじゃないかなぁ。
|