博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2589 正方形划分 dfs
阅读量:6656 次
发布时间:2019-06-25

本文共 1575 字,大约阅读时间需要 5 分钟。

#include
#include
#include
using namespace std;int map[21][21];int a[21][21];bool used[21][21];int n,m;bool dfs(){ int i,j; int x,y,r; int flag=0; for(i=1;i<=n;i++) { if(flag) break; for(j=1;j<=n;j++) if(!used[i][j]) { x=i;y=j; flag=1; break; } } int x1,y1; for(r=0;;r++) { x1=x+r;y1=y+r; if(x1>n||y1>n) break; if(a[x1][y1]-a[x1][y-1]-a[x-1][y1]+a[x-1][y-1]>1) break; if(a[x1][y1]-a[x1][y-1]-a[x-1][y1]+a[x-1][y-1]==1) { for(i=x;i<=x1;i++) for(j=y;j<=y1;j++) used[i][j]=1; if(dfs()) return 1; for(i=x;i<=x1;i++) for(j=y;j<=y1;j++) used[i][j]=0; } } for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(!used[i][j]) return 0; return 1;}int main(){ int cas,x,y; scanf("%d",&cas); while(cas--) { memset(map,0,sizeof(map)); scanf("%d%d",&n,&m); while(m--) { scanf("%d%d",&x,&y); map[x][y]=1; } memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+map[i][j]; memset(used,0,sizeof(used)); int c=dfs(); if(c==1) printf("YES\n"); if(c==0) printf("NO\n"); } return 0;}

 

转载于:https://www.cnblogs.com/xuschang-93/archive/2012/04/24/2467512.html

你可能感兴趣的文章
[转]PHP Session原理分析及使用
查看>>
(二)selenium元素定位
查看>>
数据库部分
查看>>
python字典的定义和操作
查看>>
excel批量加前后缀
查看>>
2D空间中求线段与圆的交点
查看>>
常见标签的默认属性值及相互作用——关于CSS reset的思考
查看>>
jQuety遍历数组
查看>>
jvm的内存模型
查看>>
启动后再显示状态栏Status Bar
查看>>
如何向函数传递一个数组?
查看>>
jQuery中插件的应用(注册的验证)
查看>>
MySQL ubuntu启动
查看>>
玩转X-CTR100 l STM32F4 l DHT11温湿度传感器
查看>>
对软件工程的理解
查看>>
(39.2). Spring Boot Shiro权限管理【从零开始学Spring Boot】
查看>>
Automator 简单使用流程
查看>>
前端性能监控平台showslow+Yslow搭建
查看>>
Automated Whitebox Fuzz Testing
查看>>
何为JQuery对象?
查看>>