POJ_2446_Chessboard
题目意思就是一个M*N的有洞棋盘棋盘上,用1*2的板子去覆盖没有洞的地方,要求板子不能重叠,最终能否将棋盘完整覆盖。
代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 35 struct z
{
int color;
int ct;
};
struct z chess[MAX*MAX];
int lc,rc;
int m,n;a
__int64 hole[MAX*MAX];
__int64 G[MAX*MAX][MAX*MAX];
__int64 link[MAX*MAX];
__int64 vis[MAX*MAX];
int zero=,one=;/*分别记录0,1的个数*/ int find(int);
void bin_map(void); int main(void)
{
int k,i,j;
int x,y;
scanf("%d%d%d",&m,&n,&k);
for(i=; i<k; i++)
{
scanf("%d%d",&x,&y);
hole[n*(y-)+x]=;
}
if(n&)
for(j=,i=; i<=m*n; i++)
{
if(hole[i]==)
{
chess[i].color=j=!j;
if(j)
chess[i].ct=++one;
else
chess[i].ct=++zero;
}
else
{
chess[i].color=-;
j=!j;
}
}
else
for(j=,i=; i<=m*n; i++)
{
if(hole[i]==)
{
chess[i].color=!j;
if(!j)
chess[i].ct=++one;
else chess[i].ct=++zero;
}
else
chess[i].color=-;
if(i%n)
j=!j;
}
bin_map();
int ans=;
for(i=; i<=zero; i++)
{
memset(vis,,sizeof(vis));
if(find(i))
ans++;
}
if(*ans==m*n-k)
puts("YES");
else puts("NO");
return ;
} void bin_map(void)
{
int i;
for(i=; i<=m*n; i++)
{
if(chess[i].color==)
{
if(i%n!=&&chess[i-].color==)
G[chess[i].ct][chess[i-].ct]=;
if(i%n&&chess[i+].color==)
G[chess[i].ct][chess[i+].ct]=;
if(i>n&&chess[i-n].color==)
G[chess[i].ct][chess[i-n].ct]=;
if(i<=m*n-n&&chess[i+n].color==)
G[chess[i].ct][chess[i+n].ct]=;
}
}
}
int find(int x)
{
int i;
for(i=; i<=one; i++)
{
if(G[x][i]&&!vis[i])
{
vis[i]=;
if(link[i]==||find(link[i]))
{
link[i]=x;
return ;
}
}
}
return ;
}
我的思路大致是这样:
由于是将棋盘相邻两区域覆盖,所以可将棋盘黑白相间的涂色,然后再挖去相应的洞,这样,将白色的作为一个二分图节点子集,剩下的作为另一个子集,然后相邻的黑白块代表的顶点在二分图中连接起来,然后求出二分图的额最大匹配数,便是最多能够放置的板子。
POJ_2446_Chessboard的更多相关文章
随机推荐
- Java项目依赖的配置过程
我们经常需要把大项目分解成多个小项目,然后使用依赖方式,将其他必须的依赖项目引用到项目中.最常用的方式是希望被依赖的项目能够自动被打包成jar文件,自动部署到依赖的项目中.同时被依赖项目修改后,能够同 ...
- Linq to SQL只支持SQL Server(所选对象使用不支持的数据提供程序)
- php中的全局变量引用
全局变量在函数外部定义,作用域为从变量定义处开始,到本程序文件的末尾.但和其他语言不同,php的全局变量不是自动设为可用的,在php中函数可以视为单独的程序片段,局部变量会覆盖全局变量的能见度,因此, ...
- .Net之美读书系列(一):委托与事件
开启新的读书之旅,这次读的书为<.Net之美:.Net关键技术深入解析>. 我是选择性阅读的,把一些自己觉得容易忘记的,或者比较重要的知识点记录下来,以便以后能方便呢查阅. 尊重书本原作者 ...
- c语言学习之基础知识点介绍(十三):枚举的介绍和使用
一.枚举的介绍 /* 枚举:限制的待选项. 语法: enum 枚举名{ 选项1, 选项2, 选项3, ........ 选项n }; 注意:枚举中,选项之间用 , 隔开,最后一个不用加 , :并且枚举 ...
- mysql嵌套查询
select * from(select t.`name` `name`,count(*) count from company t group by t.`name`) aa where aa.co ...
- jsp 页面获取xml的内容
<c:out value="${history.xml}" escapeXml="true" />
- 第3章 Struts2框架--2、完整的Struts2框架应用实例
1.建立一个Dynamic Web project,项目名:UserManager,把Struts2所必需的JAR复制到项目WEB-INF/lib目录下 2.修改web.xml文件,在web.xml文 ...
- yii2源码学习笔记(十三)
模型类DynamicModel主要用于实现模型内的数据验证yii2\base\DynamicModel.php <?php /** * @link http://www.yiiframework ...
- 阻止CSS样式被缓存
<link href="/stylesheet.css?<?php echo time(); ?>" rel="stylesheet" typ ...