一、内容

给定一个 N*M 的棋盘,有一些格子禁止放棋子。问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的“骑士”,类似于中国象棋的“马”,按照“日”字攻击,但没有中国象棋“别马腿”的规则)。

输入格式

第一行包含三个整数N,M,T,其中T表示禁止放置的格子的数量。接下来T行每行包含两个整数x和y,表示位于第x行第y列的格子禁止放置,行列数从1开始。

输出格式

输出一个整数表示结果。

数据范围

1≤N,M≤100

输入样例:

2 3 0

输出样例:

4

二、思路

三、代码

#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 105;
int dx[8] = {-2, -2, 2, 2, -1, -1, 1, 1};
int dy[8] = {-1, 1, -1, 1, -2, 2, -2, 2};
bool g[N][N], vis[N][N];
int n, m, t, x, y;
pair<int, int> mat[N][N];
bool dfs(int x, int y) {for (int i = 0; i < 8; i++) {int fx = x + dx[i], fy = y + dy[i];if (fx <= 0 || fy <= 0 || fx > n || fy > m || g[fx][fy] || vis[fx][fy]) continue; vis[fx][fy] = true; int px = mat[fx][fy].first, py = mat[fx][fy].second;if ((!px && !py) || dfs(px, py)) {mat[fx][fy] = make_pair(x, y); return true;}}return false;
}
int main() {scanf("%d%d%d", &n, &m, &t);for (int i = 1; i <= t; i++) {scanf("%d%d", &x, &y); g[x][y] = 1;}int ans = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (g[i][j] || ((i + j) & 1)) continue;memset(vis, false, sizeof(vis));if (dfs(i, j)) ans++;}}printf("%d\n", n * m - t - ans);return 0;
}

骑士放置 最大独立集相关推荐

  1. 378. 骑士放置——最大独立集+匈牙利算法

    给定一个 N×M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照"日&qu ...

  2. 算法竞赛——进阶指南——acwing378. 骑士放置 最大独立集

    不能相互攻击.我们把每个点相互攻击的格子连边,就相当于求最大独立点集. 且走日字,起末的(横纵坐标和)一定奇偶性不同.满足二分图的性质 等于n-最大匹配. 建模完毕. #include <bit ...

  3. Acwing 378.骑士放置(二分图的最大独立集)

    Acwing 378.骑士放置 题意 给定一个 N×M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马 ...

  4. 378 骑士放置(最大独立集)

    1. 问题描述: 给定一个 N×M 的棋盘,有一些格子禁止放棋子.问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照&q ...

  5. 二分图——骑士放置(最大独立集)

    骑士放置 给定一个 N*M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照" ...

  6. 骑士放置 Page435 最大独立集

    骑士放置 Page435 最大独立集 棋盘问题首先黑白染色 马移动的曼哈顿距离是3,必然是从白走到黑或者从黑走到白 这题折腾了俩小时,就因为递归那里懒得写int,直接用了个全局变量,根本检查不出来,人 ...

  7. 算法竞赛进阶指南 骑士放置

    4: 最大独立集 :选出最多的点,使得选出的点之间没有边. 求最大独立集:选出最小的点可以破坏所有的边 <==>最小点覆盖 <==>最大匹配数. 假设最大匹配数为m,共有n个点 ...

  8. AcWing 378. 骑士放置(最大独立集)

    题目 给定一个 N*M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照"日 ...

  9. 骑士放置 (匈牙利算法 最大独立集)

    描述 给定一个 N*M 的棋盘,有一些格子禁止放棋子.问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照"日& ...

最新文章

  1. 庆祝博客积分成功上四位数!
  2. monty python life of brian-50大最搞笑喜剧片,无厘头成必杀技!
  3. CCNA1 - Final Exam Answers (04/18/2008 10:30)
  4. 7.wait和waitpid
  5. Pandas库(3):DataFrame的条件过滤用法
  6. OC系列foundation Kit基础-NSString
  7. 使用React,Spring Boot和用户身份验证构建CRUD应用程序
  8. 打破情感分类准确率 80 分天花板!更加充分的知识图谱结合范式
  9. centos7时间同步_centos 8.x系统配置chrony时间同步服务
  10. Python中map()函数用法
  11. redis主从配置及无法连接处理
  12. 你值得拥有的 11 个前端开发利器
  13. Quartz定时任务手动触发
  14. 显示器ntsc测试软件,显示器色域检测图拉丁版
  15. 看完牛客网19年测试全部面筋,有了这篇测试面试100问的博客
  16. Linux生成校验文件asc,使用 GnuPG 加密签名来验证下载文件的可靠性和完整性
  17. Tableau学习笔记⑦(数据分层、数据组、数据集)
  18. C# 调用BarTender打印标签报错
  19. word文档找不到smartart_word2003SmartArt在哪里
  20. 计算机教室学生上机须知,微机室上机须知

热门文章

  1. vue-PhotoSwipe插件填坑
  2. TLD5097EL-ASEMI代理英飞LED驱动TLD5097EL
  3. http请求part
  4. 超级大佬已提前布局AI域名,人工智能时代真的来临了?
  5. 1 电磁波与电磁波谱
  6. 论文 | 2017KDD西行记
  7. 如何在Mac电脑上添加或删除受信任的电话号码?
  8. 学科投票系统-基于Python-Django实现的前后端分离项目
  9. 深入理解 font-size
  10. 通信机房蓄电池鼓涨原因