飛行員兄弟

2021-09-25 14:43:52 字數 1260 閱讀 1033

「飛行員兄弟」這個遊戲,需要玩家順利的開啟乙個擁有16個把手的冰箱。

已知每個把手可以處於以下兩種狀態之一:開啟或關閉。

只有當所有把手都開啟時,冰箱才會開啟。

把手可以表示為乙個4х4的矩陣,您可以改變任何乙個位置[i,j]上把手的狀態。

但是,這也會使得第i行和第j列上的所有把手的狀態也隨著改變。

請你求出開啟冰箱所需的切換把手的次數最小值是多少。

輸入一共包含四行,每行包含四個把手的初始狀態。

符號「+」表示把手處於閉合狀態,而符號「-」表示把手處於開啟狀態。

至少乙個手柄的初始狀態是關閉的。

第一行輸出乙個整數n,表示所需的最小切換把手次數。

接下來n行描述切換順序,每行輸入兩個整數,代表被切換狀態的把手的行號和列號,數字之間用空格隔開。

1≤i,j≤4

-+--

----

----

-+--

6

1 11 3

1 44 1

4 34 4

注意:如果存在多種開啟冰箱的方式,則按照優先順序整體從上到下,同行從左到右開啟。

看到這道題以為和費解的開關類似,用那個方法做了一遍不對,這道題因為只有16個門把手,所以列舉16中情況就行,用乙個二進位制為16位的數來表示每個開關的情況,複雜度為o(n^16),

具體解釋標註在**裡了

#include#include#include#include#include#include#include#include#includeconst int inf = 0x3f3f3f3f;

using namespace std;

int a[21][21],i,j,k;

queue> ans1;

queue> kong; //空序列,用於清空序列

int main()

getchar();

}int ans=1e7;

for (i=1; i<(1<<17); i++)

bool ok=true;

for (j=1;j<=4;j++)

for (k=1;k<=4;k++)

if (!b[j][k])

ok=false;

if (ok)

break;

}cout

return 0;

}

飛行員兄弟

飛行員兄弟 這個遊戲,需要玩家順利的開啟乙個擁有16個把手的冰箱。已知每個把手可以處於以下兩種狀態之一 開啟或關閉。只有當所有把手都開啟時,冰箱才會開啟。把手可以表示為乙個4 4的矩陣,您可以改變任何乙個位置 i,j 上把手的狀態。但是,這也會使得第i行和第j列上的所有把手的狀態也隨著改變。請你求出...

飛行員兄弟

飛行員兄弟 這個遊戲,需要玩家順利的開啟乙個擁有16個把手的冰箱。已知每個把手可以處於以下兩種狀態之一 開啟或關閉。只有當所有把手都開啟時,冰箱才會開啟。把手可以表示為乙個4 4的矩陣,您可以改變任何乙個位置 i,j 上把手的狀態。但是,這也會使得第i行和第j列上的所有把手的狀態也隨著改變。請你求出...

飛行員兄弟

每個把手都有兩種選擇,按 不按,總共有16個把手,因此有216 65536 2 65536 216 65 536種操作。那麼我們可以用16位二進位制數來表示,即從0000000000000000到1111111111111111。然後用1來表示按下,用0表示不按。主要步驟 include inclu...