回答編集履歴
2
リファクタ
answer
CHANGED
@@ -11,20 +11,17 @@
|
|
11
11
|
if (dic.ContainKey((x,y)) return dic[(x,y)];
|
12
12
|
if (x < width && x >= 0 && y < height && y >= 0)
|
13
13
|
{
|
14
|
+
var result = 1;
|
14
|
-
if (img.GetPixel(x, y) =
|
15
|
+
if (img.GetPixel(x, y) != Black)
|
15
16
|
{
|
16
|
-
dic.Add((x,y),1);
|
17
|
-
return 1;
|
18
|
-
}
|
19
|
-
else
|
20
|
-
{
|
21
17
|
img.SetPixel(x, y, Black);
|
22
|
-
|
18
|
+
result = (Expansion(y + 1, x) + Expansion(y - 1, x) +
|
23
19
|
Expansion(y + 1, x + 1) + Expansion(y - 1, x + 1) +
|
24
20
|
Expansion(y + 1, x - 1) + Expansion(y - 1, x - 1) +
|
25
21
|
Expansion(y, x + 1) + Expansion(y, x - 1));
|
26
|
-
dic.Add((x,y),result);
|
27
22
|
}
|
23
|
+
dic.Add((x,y),result);
|
24
|
+
return result;
|
28
25
|
}
|
29
26
|
else return 1;
|
30
27
|
}
|
1
修正
answer
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
Expansionを呼び出し過ぎなので、メモ化、Dictionaryにxy座標に対する結果を格納するとかするといいのでは?
|
2
|
+
何度も同じ再帰を繰り返してしまうため、計算が無駄です。
|
2
3
|
動的計画法とかを勉強してみるといいと思います。
|
3
4
|
|
5
|
+
|
4
6
|
```ここに言語を入力
|
5
7
|
Dictonary<(int,int),int> dic = new Dictonary<(int,int),int>()
|
6
8
|
int Expansion(int y, int x)
|
@@ -26,4 +28,6 @@
|
|
26
28
|
}
|
27
29
|
else return 1;
|
28
30
|
}
|
29
|
-
```
|
31
|
+
```
|
32
|
+
|
33
|
+
これなら座標分の計算しかしないので、スタックとかはとりあえず必要ないんじゃないかなぁ。
|