POJ 2446 Chessboard (匈牙利算法)
来源:互联网 发布:2015年进出口贸易数据 编辑:程序博客网 时间:2024/05/22 10:38
匈牙利算法求解二分图最大匹配
题意: 在一个32*32的棋盘上放置1*2的积木,有的格子不能放。问在积木不重叠的情况下能不能将棋盘放满(即没有空格)。
解法: 对于棋盘放置积木的问题,倘若数据范围小于20的话是可以用状态压缩DP轻松过去的,但是数据范围到了32的话,并且也没有要求计算放满棋盘的方法数,那么状态压缩就是没有必要并且不可行的了。那么这样考虑:我们需要对每个格子构造两两之间的组合,使得每个组合放置一块积木。那么将格子看作点,积木看作边,显然就是一个求解完美匹配的问题了。还有这样一个事实,每个格子只能与它的上下左右方向的格子建边,与4个斜向的格子之间没有边,这不就是个二分图吗。
下面是0MS代码
#include <stdio.h>#include <string.h>int n,m,tot;int g[33][33], left[33][33];bool T[33][33];int dir[4][2] = {1,0,0,1,-1,0,0,-1};bool match(int hh) { int x = hh / m + 1, y = hh % m + 1; for (int i = 0; i < 4; i ++) { int dx = x + dir[i][0], dy = y + dir[i][1]; if (dx <= 0 || dx > n || dy <= 0 || dy > m) continue; if (g[dx][dy] != 1 && !T[dx][dy]) { T[dx][dy] = true; if (!left[dx][dy] || match(left[dx][dy])) { left[dx][dy] = hh; return true; } } } return false;}bool hungary() { if (n*m-tot & 1) return false; memset(left, 0, sizeof(left)); for (int i = 1; i <= n; i ++) { for (int j = 1; j <= m; j ++) if (!g[i][j]) { memset(T, 0, sizeof(T)); int tt = (i-1)*m + j-1; if (!match(tt)) return false; } } return true;}int main() { scanf("%d%d%d", &m, &n, &tot); for (int i = 0; i < tot; i ++) { int a,b; scanf("%d%d", &a, &b); g[a][b] = 1; } printf("%s\n", hungary() ? "YES" : "NO"); return 0;}
- POJ 2446 Chessboard (匈牙利算法)
- POJ 2446 Chessboard(匈牙利算法)
- POJ 2446 Chessboard(匈牙利算法)
- POJ 2446 Chessboard(二维转一维+二分匹配+匈牙利算法)
- 匈牙利算法 poj 2466 Chessboard
- poj_2446 Chessboard匈牙利算法
- POJ 2446 匈牙利算法
- POJ 2446 : Chessboard(二部图算法)
- POJ 3692(匈牙利算法)
- POJ 3041(匈牙利算法)
- Asteroids(POJ 匈牙利算法)
- POJ 2446 Chessboard (二分匹配)
- POJ 2446 Chessboard(二分图匹配)
- POJ 2446 Chessboard(二分图匹配)
- POJ 2446 Chessboard(二分图匹配)
- POJ 2446 Chessboard(二分匹配-hungary)
- poj Chessboard 2446 (最大匹配&转换)
- POJ 2446 Chessboard(二分图匹配)
- 20130918学习小结
- 4 Different Ways to Associate Function Libraries to your QTP Scripts
- UI控件详解01-UISegmentedControl的详细使用(附效果图)
- TCP链接建立到释放过程
- HDOJ 1520 Anniversary party
- POJ 2446 Chessboard (匈牙利算法)
- Java核心技术,支撑Java程序对外接口的I/O
- LeetCode | Validate Binary Search Tree
- Shiro和AJAX完美整合
- How to think like a Computer Scientist: 课后习题第十八章3
- 网页艺术设计基础
- JSP页面点击“上移下移”链接排序
- cannot be hot swapped into a running virtal machine的解决方法
- 10. 翻转句子中单词的顺序。