ALDS1_13_A: 8 Queens Problem (続き2)
ここ
put_queen(s, r, c)
if rec(r + 1):
return True
unput_queen(s, r, c)
失敗したときは自前で状態を戻してる
コピーを作って失敗したら捨てるだけにできるといいかなあ
メモリはもったいないけど
でもnamedtupleの値をちょっとだけ変えてコピーを作る書き方がよくわからなかった
namedtuple._replace()
がそれっぽいけど配列の中身まではコピーしてくれない
いったんそれぞれの配列をコピーして取り出して要素を変更してから
新しいnamedtupleを作る?そこまでめんどいもの?
こう書き換えたところでちっともうれしい気分になれない
new_s = State(
s.queen[:], s.row[:], s.col[:], s.dpos[:], s.dneg[:]
)
put_queen(new_s, r, c)
result = rec(r + 1, new_s)
if result:
return result
ディープなコピーがあればそれでほぼこと足りる気もするんだけど
もうちょっと楽なやり方が用意されてるんじゃない?
そもそもnamedtupleでやってみようというのがおかしいのかな
別にクラスで書いてもdictで書いてもおなじだよなあ
いやそれとも配列を使ってるのが筋悪なの?
わからん
おしえてイミュータブルなひと
なおジャッジの結果は00.03s 6048 KBで遅くはなってない
メモリはむしろ減った
なんで