铺地砖的时候要铺两层才能牢固??

给出了第一层
现在让铺第二层
第二层的地砖要跟第一层的完全错开 。
这是题意

用黑格子去跟白格子二分匹配
匹配成功就连一条线( X[i][j]=i   Y[i][j]=j  ) 
完成后 再根据给每个白格子和它的前导 赋值

输出

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int MP[105][105],M,N,mp[105][105],X[105][105],Y[105][105];
int dir[4][2]={{1,0},
{0,-1}, {0,1},{-1,0}
};
bool mark[105][105];bool find(int x,int y)
{int i,j,k,a,b;for(k=0;k<4;k++){a=x+dir[k][0];b=y+dir[k][1];if(a>0&&a<=M&&b>0&&b<=N&&mp[a][b]!=mp[x][y]&&!mark[a][b]){mark[a][b]=1;//printf("%d %d\n",a,b);if((!X[a][b]&&!Y[a][b])||find(X[a][b],Y[a][b]))              //{X[a][b]=x;Y[a][b]=y;return 1;}}}return 0;
}bool hungry()
{int i,j;for(i=1;i<=M;i++)for(j=1;j<=N;j++)if((i&1)==(j&1)){memset(mark,0,sizeof(mark));if(!find(i,j))  return 0;}return 1;
}int main()
{int i,j,k;while(scanf("%d%d",&M,&N)!=EOF){for(i=1;i<=M;i++)for(j=1;j<=N;j++)scanf("%d",&mp[i][j]);memset(X,0,sizeof(X));memset(Y,0,sizeof(Y));if(!hungry()) {printf("-1\n");continue;}k=1;for(i=1;i<=M;i++)for(j=1;j<=N;j++)if(!((i&1)==(j&1))){//printf("%d %d     %d %d\n",i,j,X[i][j],Y[i][j]);MP[i][j]=k;MP[X[i][j]][Y[i][j]]=k++;}//  printf("%d!!!!\n",k);for(i=1;i<=M;i++){printf("%d",MP[i][1]);for(j=2;j<=N;j++)printf(" %d",MP[i][j]);printf("\n");}// printf("!%d!\n",MP[1][3]);}return 0;
}

URAL 1229贴地砖 . 二分图匹配相关推荐

  1. URAL 1721 Two Sides of the Same Coin(二分图匹配,输出匹配对象)

    题意:给出n个人的信息,名字.特征.排名. 在排名相差2的前提下,特征为testdata可以与特征为statements的组队,特征为anything可以任何一人组队: 求最多匹配对数,并将每队名字输 ...

  2. Dinic二分图匹配 || Luogu P3386

    题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...

  3. 二分图匹配匈牙利算法DFS实现

    1 /*==================================================*\ 2 | 二分图匹配(匈牙利算法DFS 实现) 3 | INIT: g[][]邻接矩阵; ...

  4. poj1274(二分图匹配)

    (一道基础的二分图匹配) 题目意思大概为N个牛和M个栅栏,一个牛和一个栅栏只能匹配一次,求最大匹配 直接套用二分图最大匹配模板即可 #include <iostream> #include ...

  5. poj2724(二分图匹配)

    题目大概意思为有部分奶酪需要处理,若两个奶酪的二进制只有一位不同,则可以一起处理,问最少需要处理几次 题目思路: 将可以一起处理的两个奶酪用边连接在一起,相当于边只连接二进制中有偶数个1的奶酪和二进制 ...

  6. 算法模板——二分图匹配

    实现功能为二分图匹配 原理:匈牙利算法,核心思想--匹配上了就配,没直接匹配上也要通过前面的腾出位置让这个匹配上(详见:趣写算法系列之--匈牙利算法) 本程序以Codevs2776为例 详见Codev ...

  7. 算法:ACM二分图匹配 HDU2063

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2063 摘录于互联网,原创作者redraiment,很详细的二分图匹配入门资料! 2063 过山车 Pr ...

  8. BZOJ1433 [ZJOI2009]假期的宿舍 - 二分图匹配

    题解 一道裸的二分图匹配,稍微有一点细节需要注意, 但是非常裸= = 本校并且住校的向自己的床和 自己认识的并且本校的人的床连边 离校的不需要向外连边 不是本校的就和自己认识的 并且是本校的人的床连边 ...

  9. POJ2536 二分图匹配

    题意:      有n只老鼠,m个洞,每个洞最多可以藏一只老鼠,每个老鼠的移动速度都是v,给你他们的当前坐标,和洞的坐标,突然老鹰来了,他们必须在s秒内跑到一个洞藏起来,问你最少有多少只老鼠被抓走了. ...

最新文章

  1. 一篇文章回顾智源悟道 1.0 发布全程
  2. Domino+Qucikplace+Sametime构建企业办公平台图文攻略(三)
  3. 160个Crackme011
  4. mybatis中的xml中拼接sql中参数与字符串的方法
  5. 在SQL SERVER中实现Split功能的函数,并在存储过程中使用
  6. Java Web项目,Android和微信小程序的初始页面配置
  7. java学习(100):集合类简介
  8. (王道408考研操作系统)第三章内存管理-第一节6-4:非连续分配管理方式之基本分页存储管理之两级页表
  9. 先虚拟主机后云服务器,先虚拟主机后云服务器
  10. 安卓的短信记录导入苹果_安卓换苹果手机如何进行便签数据转移?
  11. python open file mode description
  12. PaddlePaddle︱开发文档中学习情感分类(CNN、LSTM、双向LSTM)、语义角色标注
  13. java混淆工具zelix比较_Java逆向基础之混淆器
  14. html格式转换word清除格式,word文档如何清除格式(原来Word可以一键去除格式)...
  15. swustoj 143 汉诺塔
  16. QWebEngineView播放视频最大化
  17. 线条的样式solid dotted dashed
  18. Windows cmd 查看文件MD5 SHA1 SHA256
  19. Unable to get offset lags for kafka. Reason: java.lang.NullPointerException at org.apache.storm.kafk
  20. 中小企业筹资新法:应收账款也可质押融资

热门文章

  1. PS人物脸部去高光简单之法
  2. 练习8-8 移动字母 (10分)
  3. C++连接Mysql(CAPI)
  4. Nginx优化解决问题
  5. 如何接手别人写的项目?——进入新公司的一点感悟
  6. 如何查看笔记本最高支持多大的内存
  7. android 自定义flowlayout,Android 流式布局FlowLayout 实现关键字标签
  8. suricata-update管理规则
  9. suricata学习
  10. android 倒计时 界面,Android倒计时控件实现