【棋盘覆盖】【模板】二分图匹配

来源:互联网 发布:mac最上面的不隐藏 编辑:程序博客网 时间:2024/05/29 11:21

直接扔代码吧……裸题……存个模板而已。

代码:

#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int SIZE=1010;int match1[SIZE][SIZE],match2[SIZE][SIZE];bool maps[SIZE][SIZE],vis[SIZE][SIZE];int n,m;const int dx[]={0,0,1,0,-1};const int dy[]={0,1,0,-1,0};bool dfs(int xx,int yy){    vis[xx][yy]=1;    for(int i=1;i<=4;i++)    {        int x=xx+dx[i];        int y=yy+dy[i];        if(x>0&&x<=n&&y>0&&y<=m&&!maps[x][y]&&!vis[x][y])        {            vis[x][y]=1;            if(!match1[x][y]||dfs(match1[x][y],match2[x][y]))            {                match1[x][y]=xx;                match2[x][y]=yy;                return true;            }        }    }    return false;}int main(){    scanf("%d%d",&n,&m);    int k;    scanf("%d",&k);    for(int i=1;i<=k;i++)    {        int x,y;        scanf("%d%d",&x,&y);        maps[x][y]=1;    }    int ans=0;    for(int i=1;i<=n;i++)    {        for(int j=1;j<=m;j++)        {            if(!maps[i][j])            {                memset(vis,0,sizeof(vis));                if(dfs(i,j)) ans++;            }        }    }    printf("%d",ans/2);    return 0;}
0 0
原创粉丝点击