LoginSignup
2
0

More than 1 year has passed since last update.

色の塗り分け問題をアルゴリズムで解いてみる

Posted at

はじめに

身近なもので何かないかなと考えていたのですが、昔やった色塗り問題を思い出しました。例えば下のように3マスあって、3色で色を塗り分けた場合、塗り方が何通りあるかです。

image.png

マスを区別するので全体は3×3×3=27通りです。この時、隣同士で色が重複しない塗り方は何通りあるか考えてみましょう。
・・・正直アルゴリズム使わなくても、ごり押しで求められます(★の部分で12通り)。

image.png

でもせっかくなので、アルゴリズムを使って考えてみることにしました。

アルゴリズム的な何かを書いてみる

import itertools

#重複を許して3種類の組み合わせを作成(赤:0 黄:1 青:2)
comb = itertools.product(range(3), repeat=3) 
l_comb = list(comb) #リスト化

result = []

#組み合わせの1番目と2番目、もしくは2番目と3番目が同じ場合は削除
for i in range(len(l_comb)):
    if l_comb[i][0] == l_comb[i][1] or l_comb[i][1] == l_comb[i][2]:
        continue
    else:
        result.append(l_comb[i])

#得られた組み合わせとその数を表示
print(result)
print(len(result)) 

image.png

まず組み合わせを作成しています。そこから1番目-2番目もしくは2番目-3番目の値が被っていないものだけを、新しいリストに入れて作りました。
ちゃんと12個作成されたことがわかります。

まとめ

アルゴリズムってその道のプロじゃないと書けないかなと思っていたのですが、素人でもやりようによっては作れることがわかってよかったです。

参考

https://hibiki-press.tech/python/itertools/1796
https://docs.python.org/ja/3/library/itertools.html#itertools.product

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0