原題鏈結
#include
#include
#include
#include
#include
using
namespace std;
typedef pair<
int,
int> pii;
const
int maxn =5;
char state[maxn]
[maxn]
;// 儲存題目給出的矩陣
vector ans, tmp;
// ans用於儲存最終結果序列,tmp用於儲存每種方案
// 單個開關的狀態改變
void
turnone
(int x,
int y)
else
}// (x, y)所在行、列的所有開關狀態改變
void
turnall
(int x,
int y)
// 由於(x, y)操作了兩次(相當於沒操作),故此處應該再操作一次
turnone
(x, y);}
// x為矩陣橫座標,y為矩陣縱座標
// 遍歷矩陣僅需遞增y,即y>4橫向溢位矩陣時,令y=0,x++來遍歷下一行
void
dfs(
int x,
int y)}}
// 若全部開關處於開啟狀態
if(flag)
}return;}
// 判斷y是否發生橫向溢位
// 若溢位,則遍歷下一行
if(y ==4)
// 操作當前開關
turnall
(x, y)
; tmp.
push_back()
;dfs
(x, y+1)
;// 恢復現場
tmp.
pop_back()
;// 再操作一次,即代表不操作當前開關
turnall
(x, y)
;dfs
(x, y+1)
;}intmain()
dfs(0,
0);printf
("%ld\n"
, ans.
size()
);for(
int i =
0; i < ans.
size()
; i++
)return0;
}
116 飛行員兄弟
演算法標籤 位運算 二進位制列舉 這道題目解題思路大致是,首先我們可以構造乙個16位二進位制數,然後,二進位制數的每一位代表4x4矩陣中的一位,例如1代表 1,1 2代表 1,2 3代表 1,3 4代表 1,4 5代表 2,1 既然這樣的話,那麼我們只需要列舉這個16位的二進位制數,就可以確定我們的...
Acwing 116 飛行員兄弟
飛行員兄弟 這個遊戲,需要玩家順利的開啟乙個擁有16個把手的冰箱。已知每個把手可以處於以下兩種狀態之一 開啟或關閉。只有當所有把手都開啟時,冰箱才會開啟。把手可以表示為乙個4 4的矩陣,您可以改變任何乙個位置 i,j 上把手的狀態。但是,這也會使得第i行和第j列上的所有把手的狀態也隨著改變。請你求出...
飛行員兄弟
飛行員兄弟 這個遊戲,需要玩家順利的開啟乙個擁有16個把手的冰箱。已知每個把手可以處於以下兩種狀態之一 開啟或關閉。只有當所有把手都開啟時,冰箱才會開啟。把手可以表示為乙個4 4的矩陣,您可以改變任何乙個位置 i,j 上把手的狀態。但是,這也會使得第i行和第j列上的所有把手的狀態也隨著改變。請你求出...