搜了一下列舉的題 網上說這題特別經典 這是參考別人的**,做個模板,運用二進位制來儲存棋盤,但一旦棋盤規模增大這種演算法還是不行,再研究一下dfs的演算法。
#include #include using namespace std;int step[65535]; //記錄步驟
bool flag[65535]; //防止重複搜尋
unsigned short qstate[65535]; //搜尋的狀態,正好可以用乙個16位的無符號短整形表示
int rear = 0; //佇列尾指標
int top = 0; //佇列頭指標
///初始化:讀入棋盤初始狀態並把它轉化為整數存入佇列頭,黑的位為1白的為0
void init()
qstate[rear++] = temp;
flag[temp] = true;
} ///翻轉乙個棋子並按規則對齊周圍棋子附加影響
unsigned short move(unsigned short state, int i)
//廣度優先搜尋,從佇列中迴圈取出狀態,並把翻轉16次(即所有情況),一旦發現滿足要求的立即停止,否則加入佇列
bool bfs()
POJ 1753 Flip Game 二進位制列舉
題型 列舉 題意 4 4的棋盤上面放了16盞燈,有黑有亮。每次按乙個燈,會改變本身及其上下左右四個燈的狀態,即黑變白或白變黑,問最少需要按幾次,可以將所有燈變為同一種狀態,不能變則輸出 impossible 分析 如果按個多個燈,可以發現,這些操作的順序是互不影響的。對於每個燈,按一次翻轉,再按一次...
二進位制列舉
fliptile 乙個反轉問題,大意是一頭牛要反轉木板,木板有黑和白,全部翻成白色的反法 輸出。小蒟蒻根本想不到 參考了大佬的部落格。點此轉入 把第一行的全部翻法都試一遍,然後看哪種的步數最少。好難想。include include int maze 20 20 int t 20 20 int f ...
二進位制列舉
一 二進位制操作 算數字運算 a 60 0011 1100 b 13 0000 1101 1.與 兩個二進位制數,同 1為 1,否則為 0。a b 12 0000 1100 2.或 兩個二進位制數,同 0為 0,否則為 1。a b 61 0011 1101 3.非 按位取反 對二進位制每一位進行了一...