求能出售多少个1*2的矩形,,将原图染色,(i+j)%2==0的染白色,其余为黑色,

求白色跟黑色的最大匹配

#include<stdio.h>
#include<string.h>
int n,m,ma[105][105],mark[105][105];
int dir[4][2]={-1,0, 0,-1, 1,0, 0,1};
struct linky
{
int x;
int y;
}link[105][105];
int pd(int x,int y)
{
if(x>=1&&x<=n&&y>=1&&y<=m)
return 1;
return 0;
}
int find(int x,int y)
{
int i,a,b;
for(i=0;i<4;i++)
{
a=x+dir[i][0];
b=y+dir[i][1];
if(pd(a,b)&&ma[a][b]==0&&mark[a][b]==0)
{
mark[a][b]=1;
if(link[a][b].x==0||find(link[a][b].x,link[a][b].y)==1)
{
link[a][b].x=x;
link[a][b].y=y;
return 1;
}
}
}
return 0;
}
int main()
{
int i,t,x,y,sum,j,temp=0;
while(scanf("%d%d",&n,&m),m&&n)
{
sum=0;
memset(ma,0,sizeof(ma));
memset(link,0,sizeof(link));
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d%d",&x,&y);
ma[x][y]=1;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(ma[i][j]==0&&(i+j)%2==0)//(i+j)/2对原图染色,不同颜色间匹配
{
memset(mark,0,sizeof(mark));
sum=sum+find(i,j);
}
}
if(temp++>0)
printf("\n");
printf("%d\n",sum);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(link[i][j].x)
printf("(%d,%d)--(%d,%d)\n",i,j,link[i][j].x,link[i][j].y);
}
return 0;
}

hdu 1507的更多相关文章

  1. HDU 1507 Uncle Tom's Inherited Land(最大匹配+分奇偶部分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507 题目大意:给你一张n*m大小的图,可以将白色正方形凑成1*2的长方形,问你最多可以凑出几块,并输 ...

  2. HDU 1507 Uncle Tom's Inherited Land*(二分图匹配)

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  3. Hdu 1507 Uncle Tom's Inherited Land* 分类: Brush Mode 2014-07-30 09:28 112人阅读 评论(0) 收藏

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  4. hdu 1507 Largest Rectangle in a Histogram 动态规划计算最大面积

    记录动态规划dpl,dpr,分辨记录i左面的比i大的,右面比i大的,然后(dpr[i]-dpl[i]+1)*h[i]得出长度 动态转移方程while(temp>1 && h[te ...

  5. HDU 1507 Uncle Tom's Inherited Land*

    题目大意:给你一个矩形,然后输入矩形里面池塘的坐标(不能放东西的地方),问可以放的地方中,最多可以放多少块1*2的长方形方块,并输出那些方块的位置. 题解:我们将所有未被覆盖的分为两种,即分为黑白格( ...

  6. hdu 1507 记录路径的二分匹配 **

    题意:N*M的矩形,向其中填充1*2的小块矩形,黑色的部分不能填充,问最多可以填充多少块.链接:点我 黑白棋最大匹配 将棋盘中i+j为奇数的做A集合,偶数的做B集合,相邻的则建立联系.于是便转换成寻找 ...

  7. HDU 1507 Uncle Tom's Inherited Land*(二分匹配,输出任意一组解)

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  8. hdu 1507(二分图匹配)

    Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  9. HDU题解索引

    HDU 1000 A + B Problem  I/O HDU 1001 Sum Problem  数学 HDU 1002 A + B Problem II  高精度加法 HDU 1003 Maxsu ...

随机推荐

  1. angularJS之使用过滤器转化输出 (angularJS系列最后一篇)

    在视图模板中使用过滤器 过滤器也是一种服务,负责对输入的内容进行处理转换,以便更好地向用户显示. 过滤器可以在模板中的{{}}标记中使用: {{ expression | filter:arg1:ar ...

  2. [LeetCode]Copy List with Random Pointer &amp;Clone Graph 复杂链表的复制&amp;图的复制

    /** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label ...

  3. C语言库函数大全及应用实例三

    原文:C语言库函数大全及应用实例三 [编程资料]C语言库函数大全及应用实例三 函数名: ecvt 功 能: 把一个浮点数转换为字符串 用 法: char ecvt(double value, int ...

  4. java ResultSet 结果集处理 createStatement() 里参数的意义(第一弹)

    createStatement(int   resultSetType,int  resultSetConcurrency)参数一:结果集类型可取值:  1.ResultSet.TYPE_FORWOR ...

  5. Django查询的琐碎记录

    我的需求是这样的,获取指定用户的获“赞”总数. 用户 models.py class UserProfile(models.Model): user = models.OneToOneField(Us ...

  6. CSS学习笔记:Media Queries

    CSS3提供了Media Queries(媒体查询)的概念,可以利用它查询以下数据: 1.浏览器窗口的宽和高: 2.设备的宽和高: 3.设备的手持方向,横向/竖向: 4.分辨率. @media规则的语 ...

  7. 六大利器助Java程序开发事半功倍

    实用的开发工具对于Java程序开发者来说,工作起来事半功倍.本文中小编将为大家列举包括开发环境.分析测试.代码保护等实用工具. 开发环境 Sonarqube Sonarqube是一个开源平台,是一款代 ...

  8. Mysql 使用 select into outfile

    Mysql支持将查询结果到处 默认语法 select .. from table  into outfile "filepath\filename.txt"; 如果在执行的过程中遇 ...

  9. Effective C++(18) 让接口更容易被正确使用,不易被误用

    问题聚焦:     从这个条款开始,我们把注意力转移到软件设计和声明上来,具体的说就是,C++接口的设计和声明.     所谓软件设计,就是以一般习惯的构想开始,演变成细节的实现,最终开发针对性的特殊 ...

  10. Linq无聊练习系列7----Insert,delete,update,attach操作练习

    /*********************Insert,delete,update,attach操作练习**********************************/            ...