骑士放置 最大独立集
一、内容
给定一个 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;
}
骑士放置 最大独立集相关推荐
- 378. 骑士放置——最大独立集+匈牙利算法
给定一个 N×M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照"日&qu ...
- 算法竞赛——进阶指南——acwing378. 骑士放置 最大独立集
不能相互攻击.我们把每个点相互攻击的格子连边,就相当于求最大独立点集. 且走日字,起末的(横纵坐标和)一定奇偶性不同.满足二分图的性质 等于n-最大匹配. 建模完毕. #include <bit ...
- Acwing 378.骑士放置(二分图的最大独立集)
Acwing 378.骑士放置 题意 给定一个 N×M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马 ...
- 378 骑士放置(最大独立集)
1. 问题描述: 给定一个 N×M 的棋盘,有一些格子禁止放棋子.问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照&q ...
- 二分图——骑士放置(最大独立集)
骑士放置 给定一个 N*M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照" ...
- 骑士放置 Page435 最大独立集
骑士放置 Page435 最大独立集 棋盘问题首先黑白染色 马移动的曼哈顿距离是3,必然是从白走到黑或者从黑走到白 这题折腾了俩小时,就因为递归那里懒得写int,直接用了个全局变量,根本检查不出来,人 ...
- 算法竞赛进阶指南 骑士放置
4: 最大独立集 :选出最多的点,使得选出的点之间没有边. 求最大独立集:选出最小的点可以破坏所有的边 <==>最小点覆盖 <==>最大匹配数. 假设最大匹配数为m,共有n个点 ...
- AcWing 378. 骑士放置(最大独立集)
题目 给定一个 N*M 的棋盘,有一些格子禁止放棋子. 问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照"日 ...
- 骑士放置 (匈牙利算法 最大独立集)
描述 给定一个 N*M 的棋盘,有一些格子禁止放棋子.问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照"日& ...
最新文章
- 庆祝博客积分成功上四位数!
- monty python life of brian-50大最搞笑喜剧片,无厘头成必杀技!
- CCNA1 - Final Exam Answers (04/18/2008 10:30)
- 7.wait和waitpid
- Pandas库(3):DataFrame的条件过滤用法
- OC系列foundation Kit基础-NSString
- 使用React,Spring Boot和用户身份验证构建CRUD应用程序
- 打破情感分类准确率 80 分天花板!更加充分的知识图谱结合范式
- centos7时间同步_centos 8.x系统配置chrony时间同步服务
- Python中map()函数用法
- redis主从配置及无法连接处理
- 你值得拥有的 11 个前端开发利器
- Quartz定时任务手动触发
- 显示器ntsc测试软件,显示器色域检测图拉丁版
- 看完牛客网19年测试全部面筋,有了这篇测试面试100问的博客
- Linux生成校验文件asc,使用 GnuPG 加密签名来验证下载文件的可靠性和完整性
- Tableau学习笔记⑦(数据分层、数据组、数据集)
- C# 调用BarTender打印标签报错
- word文档找不到smartart_word2003SmartArt在哪里
- 计算机教室学生上机须知,微机室上机须知