給定 n×n 0/1 矩陣(n ≤ 18),操作:選一格翻轉(0↔1),其上下左右四鄰格同時翻轉。求最少操作次數使全矩陣變為 0。多解輸出任意一個。
2ⁿ 種枚舉)i (i≥2) 行,為使第 i-1 行最終為 0,第 i 行的翻轉狀態被唯一決定:若第 i-1 行第 j 列當前為 1,則必須翻轉 (i,j)n 行,最後檢查第 n 行是否全 0。若是,得到一組合法解int 位掩碼表示,翻轉操作為異或int solve(int firstRowMask) {
memcpy(b, a, sizeof(a));
int ops = 0;
// 應用首行操作
for (int j = 0; j < n; ++j)
if (firstRowMask & (1<
flip 時檢查上下左右是否越界