棋盘覆盖
题意:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>PII;
const int maxn=1e2+5;
int fx[4]={0,0,1,-1},fy[4]={1,-1,0,0};
int n,t,ans;
PII marry[maxn][maxn];
bool vis[maxn][maxn],mp[maxn][maxn];
bool dfs(int x,int y){
for(int i=0;i<4;i++){
int a=x+fx[i],b=y+fy[i];
if(vis[a][b]||mp[a][b]||a<1||a>n||b<1||b>n)continue;
PII t=marry[a][b];
vis[a][b]=1;
if(t.first==0||dfs(t.first,t.second)){
marry[a][b]={x,y};
return 1;
}
}
return 0;
}
int main(){
scanf("%d%d",&n,&t);
for(int i=1,x,y;i<=t;i++){
scanf("%d%d",&x,&y);
mp[x][y]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(!mp[i][j]){
memset(vis,0,sizeof(vis));
if(dfs(i,j))ans++;
}
}
}
printf("%d\n",ans);
}