#方針
とりあえず、縦H行、横W列の計(2^(H + W))通りについて、与えられたボードを各パターンで白に塗りつぶし(最終的な黒を数えるのだから赤ではなく白で塗り戻すのも一緒)、それらを一度出力することで中身を確認したいです。
#入力 (以下の出力はこの入力に従う)
Python
12 3 2 2..# 3###
#コード
Python
1from itertools import product 2 3H, W, K = map(int, input().split()) 4 5board = [] 6for _ in range(H): 7 board.append(str(input())) 8 9_board = board.copy() 10 11for bith in list(product([0, 1], repeat = H)): 12 for bitw in list(product([0, 1], repeat = W)): 13 14 for indh, to_whitenh in enumerate(bith): 15 for indw, to_whitenw in enumerate(bitw): 16 17 if to_whitenh: 18 board[indh] = '.' * W 19 if to_whitenw: 20 for el in board: 21 el = list(el) 22 el[indw] = '.' 23 ''.join(el) 24 25 print(board) 26 27 for i in range(len(board)): 28 board[i] = _board[i]
#出力
Python
1['..#', '###'] 2['..#', '###'] 3['..#', '###'] 4['..#', '###'] 5['..#', '###'] 6['..#', '###'] 7['..#', '###'] 8['..#', '###'] 9['..#', '...'] 10['..#', '...'] 11['..#', '...'] 12['..#', '...'] 13['..#', '...'] 14['..#', '...'] 15['..#', '...'] 16['..#', '...'] 17['...', '###'] 18['...', '###'] 19['...', '###'] 20['...', '###'] 21['...', '###'] 22['...', '###'] 23['...', '###'] 24['...', '###'] 25['...', '...'] 26['...', '...'] 27['...', '...'] 28['...', '...'] 29['...', '...'] 30['...', '...'] 31['...', '...'] 32['...', '...']
#問題点
どうやら、縦H行についてのパターンは出来ているように見えます。しかし、横W列についてのビット全探索が全く出来ておらず、結果縦の2^2 = 4つのパターンしか出来ていません。if to_whitenwの箇所で横のビット全探索についても上手く出来たと思ったのですが、どのような箇所が理由で期待する結果とならないのでしょうか。素人質問にて恐縮ですが、ご教授のほどよろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/20 09:24