python サンププコード

【Python】周囲8マスを検索する方法

競技プログラミングをしていて、特定のマスから距離1の周囲8マスを検索するという場面は多いのではないでしょうか。

この記事では、そんな周囲8マスを調べる方法について解説していきます。

周囲8マスの確認方法

方法は、2通りあります。

1つ目は、先に周囲8マスの座標を生成する方法です。

2つ目は、for文で一つずつ見ていく方法です。

それぞれ解説していきます。

周囲8マスを先に用意しておく方法

>>> X, Y = 3, 5
>>> xys = [[X+dx, Y+dy] for dx in [-1, 0, 1] for dy in [-1, 0, 1] if not dx == dy == 0]
>>> xys
[[2, 4], [2, 5], [2, 6], [3, 4], [3, 6], [4, 4], [4, 5], [4, 6]]
>>> for x, y in xys:
...     (任意の処理)

周囲8マスをfor文で探索する方法

>>> X, Y = 3, 5
>>> for dx in [-1, 0, 1]:
...     for dy in [-1, 0, 1]:
...             if not dx == dy == 0:
...                     x, y = X+dx, Y+dy
...                     (任意の処理)

範囲が決まっている場合の追加条件について

横幅がW、縦幅がHと定義されているとします。

if 0 <= x <= W and 0 <= H

両橋が隣接している場合の追加処理

同様に、横幅がW、縦幅がHと定義されているとします。

x, y = x%W, y%H

まとめ 周囲8マスを検索する方法

周囲8マスを検索する方法について解説しました。

わからない事があれば、気楽に質問を投げてください。

他の処理についても解説を上げていく予定なので、良ければ読んでみてください。

-python, サンププコード