AcWing 372. 棋盘覆盖
原题链接
中等
作者:
UpMing
,
2020-10-23 13:06:22
,
所有人可见
,
阅读 604
#include<bits/stdc++.h>
using namespace std;
int n,m,vis[555][555],use[222][222];
typedef pair<int,int> PII;
PII g[521][555];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int find(int x,int y)
{
for(int i=0 ;i<4;i++)
{
int x1=x+dx[i];
int y1=y+dy[i];
if(x1<1||x1>n||y1<1||y1>n||vis[x1][y1]) continue;
if((x1+y1)%2==0) continue;
if(use[x1][y1]) continue;
use[x1][y1]=1;
if(find(g[x1][y1].first,g[x1][y1].second)||(g[x1][y1].first==-1&&g[x1][y1].second==-1))
{
g[x1][y1]={x,y};
return 1;
}
}
return 0;
}
int main()
{
cin>>n>>m;
memset(g,-1,sizeof g);
for(int i=1 ;i<=m ;i++)
{
int u,v;
cin>>u>>v;
vis[u][v]=1;
}
int ans=0;
for(int i=1 ;i<=n ;i++)
{
for(int j=1 ;j<=n ;j++)
{
memset(use,0,sizeof use);
if((i+j)%2||vis[i][j]) continue;
if(find(i,j)) ans++;
}
}
cout<<ans<<endl;
return 0;
}