CODEVS 2171 棋盤覆蓋

2022-05-05 19:51:11 字數 1114 閱讀 7760

給出一張nn(n<=100)的西洋棋棋盤,其中被刪除了一些點,問可以使用多少12的多公尺諾骨牌進行掩蓋。

錯誤日誌: 直接在模板上調整 \(maxn\) 時沒有在相應鄰接表陣列位置把陣列大小調整為 \(maxn * maxn\)

經典的二分圖匹配問題

\(1\) 要素: 每個點只能被一張骨牌覆蓋

\(0\) 要素: 將棋盤黑白染色, 其對角線格仔不可能被一張骨牌覆蓋

染色方法: \(if(i + j) \% 2 == 0\) 染為白色

#include#include#include#include#include#define ll long long

#define rep(i, x, y) for(int i = (x);i <= (y);i++)

using namespace std;

int rd()

while(c >= '0' && c <= '9')

return flag * out;

}const int maxn = 419, maxv = 1000019, inf = 1e9 + 19;

int head[maxn * maxn],nume = 1;

struct nodee[maxv << 3];

void add(int u,int v,int dis)

int len, num;

int map[maxn][maxn];

int mx[4] = ;

int my[4] = ;

bool judge(int x, int y)

int id(int x, int y)

int mat[maxn * maxn], used[maxn * maxn];

bool match(int u)

}} return 0;

}int main()

rep(i, 1, len)rep(j ,1, len)

} int ans = 0;

rep(i, 1, len)rep(j, 1, len)

printf("%d\n", ans);

return 0;

}

棋盤覆蓋問題

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 所示...