上下左右の探索
ちょっと他人のコードを読んでいてなるほどと思ったからメモ。
これで少しハードコーダーを脱せるかもしれない。
2次元の探索問題でよく自分の上下左右を探索したい時がある。これを普通にコーディングするとどっかで下のような感じになっているはずだ。
dfs(x-1,y); dfs(x+1,y); dfs(x,y-1); dfs(x,y+1);
これがちょっと恥ずかしい時は
for (int dy = -1; dy <= 1; dy++) for (int dx = -1; dx <= 1; dx++) if (dx != 0 ^ dy != 0) dfs(x+dx, y+dy);
とすればよいらしい。
ちなみに^を|に変えると、4連結を8連結に変えて探索できる。
ま、最初のほうが書くの楽じゃんって話はあるけど・・・。