【算法竞赛进阶指南】棋盘覆盖(二分图最大匹配)

简介: 【算法竞赛进阶指南】棋盘覆盖(二分图最大匹配)

原题链接

思路:

因为骨牌是1*2的,所以可以看成是两个格子放一个。

建图过程:假设格子的坐标是(i,j),那么可以根据i+j的奇偶把所有的格子分成黑白两种,如果某个黑格子没有被禁止,那么就可以让它和它周围的白格子连边。黑格子周围都不会出现黑格子,所以同一类型的格子之间是不存在边的。建图后求二分图的最大匹配即可。

代码:

#include<bits/stdc++.h>
using namespace std;
int g[110][110];///表示不能放置
bool st[110][110];
typedef pair<int,int>PII;
PII mat[110][110];
int nx[]={0,0,1,-1};
int ny[]={1,-1,0,0};
int n,m;
bool check(int x,int y){
    if(x>0&&x<=n&&y>0&&y<=n&&!g[x][y]&&!st[x][y]) return 1;
    return 0;
}
bool Find(int x,int y){
    for(int i=0;i<4;i++){
        int nxx=x+nx[i],nyy=y+ny[i];
        if(check(nxx,nyy)){
            st[nxx][nyy]=1;
            PII t=mat[nxx][nyy];
            if(t.first==-1||Find(t.first,t.second)){
                mat[nxx][nyy]={x,y};
                return 1;
            }
        }
    }
    return 0;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        g[x][y]=1;
    }
    memset(mat,-1,sizeof mat);
    int res=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if((i+j)%2&&!g[i][j]){
                memset(st,0,sizeof st);
                if(Find(i,j)) res++;
            }
    cout<<res<<endl;   
    return 0;
}
目录
相关文章
|
算法
算法设计与分析/数据结构与算法实验1:棋盘覆盖问题
算法设计与分析/数据结构与算法实验1:棋盘覆盖问题
248 0
算法设计与分析/数据结构与算法实验1:棋盘覆盖问题
|
算法
分治算法——棋盘覆盖
分治算法——棋盘覆盖
166 0
|
算法 Java C语言
棋盘覆盖问题的算法实现
本文为原创,如需转载,请注明作者和出处,谢谢!    在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种L型骨牌覆盖除这个特殊方格的其它方格,如何覆盖。
744 0
|
25天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
10天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
11天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
12天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。