8クイーン
順列ができたので、「8クイーン」⇒お気楽 Python プログラミング入門:第3回再帰定義と高階関数できるんじゃね?ってことで。
順列のコードにその状態を描画する関数drow()をくっつけた。
def queen(n, pos, m = 0): if n == m: drow(n, pos) pos = [] else: for x in range(1, n+1): if x in pos: continue pos.append(x) queen(n, pos, m+1) pos.pop() def drow(n, pos): for i in pos: for j in range(n): if j == i-1: print "Q", else: print "*", print print def main(): queen(4, []) if __name__ == "__main__": main()
結果
D:\workspace\Python\2-29>python test.p Q * * * * Q * * * * Q * * * * Q Q * * * * Q * * * * * Q * * Q * Q * * * * * Q * * Q * * * * * Q Q * * * * * Q * * * * Q * Q * * Q * * * * * * Q * Q * * * * Q * Q * * * * * * Q * * Q * * Q * * * Q * * Q * * * * * Q * * * * Q * Q * * Q * * * * * * Q * * Q * * Q * * * * Q * Q * * * * * * Q * Q * * * * Q * * * * Q Q * * * * Q * * * * * Q Q * * * * * Q * * Q * * * * * Q * * Q * Q * * * * * Q * Q * * * * Q * * * * * Q * * Q * Q * * * * * * Q * Q * * * * Q * * Q * * Q * * * * * * Q * * Q * * Q * * * * * Q Q * * * * * Q * * * * Q Q * * * * Q * * * * Q * * * * Q * Q * * Q * * * * * * Q Q * * * * Q * * * * Q * * * * Q Q * * * * * Q * * Q * * * * * Q * Q * * Q * * * * * Q * * * * Q * Q * * * * Q * Q * * * * * * Q * * Q * Q * * * * Q * * * * * Q * * Q * * Q * * Q * * *
もちろんうまくできてる。
ただ、順列が求まった〜、と言うよりは何倍か楽しい。
それだけ。
ちなみに、これだと4クイーンじゃんって突っ込みはなしで。
8クイーンだと、見せられるほうもつらいでしょ。
これだとあまりにも単純すぎるのでもう少し工夫の余地あり。