116 飛行員兄弟

2021-10-21 17:07:31 字數 1280 閱讀 8505

原題鏈結

#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列上的所有把手的狀態也隨著改變。請你求出...