n*m的棋盤,某些格仔進製放棋子,最多能在棋盤上放置多少塊1*2的骨牌,
骨牌不能出界,相互不能重疊。
乙個骨牌佔兩個格仔,將棋盤黑白染色,二分圖最大匹配關鍵,找0要素和1要素:這裡1要素是每個格仔只能被一塊骨牌覆蓋,0要
素不同色的格仔不能被同一塊骨牌所覆蓋。所以根據不同顏色劃分
為2個部分,可以被同一塊骨牌覆蓋的兩點之間連線,由此可以形
成一張二分圖,然後其最大匹配數即最多能放置的骨牌數。
wa點:#define ll long long左部節點集、右部節點集弄混,原因是黑白節點的判斷標準弄錯
(不能按照格仔序號的奇偶性,應該是行數+列數的奇偶性)。
using namespace std;
const int n=10010;
const int m=10010*4;
int next[m];
int ver[m];
int head[n];
int tot;
void add(int x,int y)
bool visit[n];
int match[n];
bool dfs(int x)}}
return 0;
}bool mark[n];
bool judge(int x,int y,int n)
int main()
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
int ans=0;
for(int i=1;i<=n;i++)//遍歷每乙個左部節點,看能不能找到其在右邊的對應匹配節點
for(int j=1;j<=n;++j)
if((i+j)%2==0)
cout source code include include include using namespace std const int n 1024 int board n n count void cover int sx,int sy,int cx,int cy,int size,int cx1,i... 在乙個2k 2k個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為一特殊方格,且稱該棋盤為一特殊棋盤,顯然特殊方格在棋盤上出現的位置有4k種情形。因而對任何k 0,有4k種不同的特殊棋盤。特殊方格必位於4個較小子棋盤之一中,其餘3個子棋盤中無特殊方格。為了將這3個無特殊方格的子棋盤轉化為特殊... 問題 在乙個2k 2k k 0 個方格組成的棋盤中,恰有乙個方格與其他方格不同,稱該方格為特殊方格。顯然,特殊方格在棋盤中可能出現的位置有4k種,因而有4k種不同的棋盤,圖4.10 a 所示是k 2時16種棋盤中的乙個。棋盤覆蓋問題 chess cover problem 要求用圖4.10 b 所示...棋盤覆蓋問題
棋盤覆蓋演算法
棋盤覆蓋問題