题目链接

调了一上午,单步的效率太低了,特别是在有递归的情况下。。。下午来了,输出调试了下,就发现bug了,各种混乱啊。

比较高兴的事,1Y了。本来还准备用edge1优化一下的,结果完全没用到。。

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. using namespace std;
  5. struct node
  6. {
  7. int x1,y1,x2,y2,c;
  8. } p[];
  9. struct n1
  10. {
  11. int u,v,next;
  12. } edge1[],edge2[];
  13. int first1[],first2[];
  14. int to1,to2,n;
  15. int o[];
  16. void CL()
  17. {
  18. to1 = to2 = ;
  19. memset(first1,-,sizeof(first1));
  20. memset(first2,-,sizeof(first2));
  21. }
  22. int fun(int x,int y)
  23. {
  24. if(p[x].x2 <= p[y].x1)
  25. {
  26. if(p[x].y1 < p[y].y2&&p[x].y1 > p[y].y1)
  27. return ;
  28. else if(p[x].y2 < p[y].y2&&p[x].y2 > p[y].y1)
  29. return ;
  30. else if(p[y].y1 < p[x].y2&&p[y].y1 > p[x].y1)
  31. return ;
  32. else if(p[y].y2 < p[x].y2&&p[y].y2 > p[x].y1)
  33. return ;
  34. else if(p[x].y1 == p[y].y1&&p[x].y2 == p[y].y2)
  35. return ;
  36. else
  37. return ;
  38. }
  39. return ;
  40. }
  41. void add1(int u,int v)
  42. {
  43. edge1[to1].u = u;
  44. edge1[to1].v = v;
  45. edge1[to1].next = first1[u];
  46. first1[u] = to1 ++;
  47. }
  48. void add2(int u,int v)
  49. {
  50. edge2[to2].u = u;
  51. edge2[to2].v = v;
  52. edge2[to2].next = first2[u];
  53. first2[u] = to2 ++;
  54. }
  55. int judge(int x)
  56. {
  57. int i;
  58. for(i = first2[x];i != -;i = edge2[i].next)
  59. {
  60. if(!o[edge2[i].v])
  61. break;
  62. }
  63. if(i == -)
  64. return ;
  65. else
  66. return ;
  67. }
  68. int dfs(int x,int c,int step)
  69. {
  70. int i;
  71. if(x < )
  72. return ;
  73. if(step > n)
  74. return ;
  75. for(i = ;i <= n;i ++)
  76. {
  77. int z = judge(i);
  78. if(!o[i]&&z&&c == p[i].c)
  79. {
  80. o[i] = ;
  81. if(dfs(x,p[i].c,step+))
  82. {
  83. return ;
  84. }
  85. o[i] = ;
  86. }
  87. else if(!o[i]&&z&&c != p[i].c)
  88. {
  89. o[i] = ;
  90. if(dfs(x-,p[i].c,step+))
  91. {
  92. return ;
  93. }
  94. o[i] = ;
  95. }
  96. }
  97. return ;
  98. }
  99. int main()
  100. {
  101. int t,i,j;
  102. scanf("%d",&t);
  103. while(t--)
  104. {
  105. scanf("%d",&n);
  106. CL();
  107. for(i = ; i <= n; i ++)
  108. {
  109. scanf("%d%d%d%d%d",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2,&p[i].c);
  110. }
  111. for(i = ; i <= n; i ++)
  112. {
  113. for(j = ; j <= n; j ++)
  114. {
  115. if(i != j)
  116. {
  117. if(fun(i,j))
  118. {
  119. add1(i,j);
  120. add2(j,i);
  121. //printf("%d %d\n",j,i);
  122. }
  123. }
  124. }
  125. }
  126. for(i = ;i <= n-;i ++)
  127. {
  128. memset(o,,sizeof(o));
  129. if(dfs(i,,))
  130. break;
  131. }
  132. printf("%d\n",i);
  133. }
  134. return ;
  135. }

POJ 1691 Painting A Board(迭代深搜)的更多相关文章

  1. POJ 1691 Painting a Board(状态压缩DP)

    Description The CE digital company has built an Automatic Painting Machine (APM) to paint a flat boa ...

  2. POJ 1691 Painting A Board(DFS)

    链接 题意 : 看了好长时间终于看懂题目了,将一个大矩形划分成若干小矩形,告诉你每个小矩形的左上角那个点和右下角那个点的坐标,告诉你这个小矩形要涂的颜色,每个颜色对应一个刷子,问你最少要使用几次刷子. ...

  3. 小结:A* & IDA* & 迭代深搜

    概要: 在dfs中,如果答案的深度很小但是却很宽,而且bfs还不一定好做的情况下,我们就综合bfs的优点,结合dfs的思想,进行有限制的dfs.在这里A*.IDA*和迭代深搜都是对dfs的优化,因此放 ...

  4. bzoj 1085骑士精神 迭代深搜

    题目传送门 题目大意:给出一幅棋盘,问能否复原,中文题面,不做解释. 思路:第一次写迭代深搜的题目,这道题还是挺经典的.这道题的状态很明显的每多搜一层就是多八倍,非常的多,而且又是t组输入,所以必定有 ...

  5. uva12558 Egyptian Fractions (HARD version)(迭代深搜)

    Egyptian Fractions (HARD version) 题解:迭代深搜模板题,因为最小个数,以此为乐观估价函数来迭代深搜,就可以了. #include<cstdio> #inc ...

  6. [vijos1159&洛谷1494]岳麓山上打水<迭代深搜>

    题目链接:https://vijos.org/p/1159 https://www.luogu.org/problem/show?pid=1494 这是今天的第三道迭代深搜的题,虽然都是迭代深搜的模板 ...

  7. [codevs1049]棋盘染色<迭代深搜>

    题目链接:http://codevs.cn/problem/1049/ 昨天的测试题里没有打出那可爱的迭代深搜,所以今天就来练一练. 这道题其实我看着有点懵,拿着题我就这状态↓ 然后我偷偷瞄了一眼hz ...

  8. [noip模拟]小猫爬山<迭代深搜>

    [题目描述]: Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). Freda和rai ...

  9. 【wikioi】1049 棋盘染色(迭代深搜)

    http://www.wikioi.com/problem/1049/ 这题我之前写没想到迭代加深,看了题解,然后学习了这种搜索(之前我写的某题也用过,,但是不懂专业名词 囧.) 迭代加深搜索就是限制 ...

随机推荐

  1. luarocks install with lua5.1 and luajit to install lapis

    # in luarocks source directory...git clone https://github.com/archoncap/luarockscd luarocks ./config ...

  2. php自定义函数call_user_func和call_user_func_array详解

    看UCenter的时候有一个函数call_user_func,百思不得其解,因为我以为是自己定义的函数,结果到处都找不到,后来百度了一下才知道call_user_func是内置函 call_user_ ...

  3. JAVA接口继承、抽象类等

    1.定义接口 package test.intefaces; public interface TestIntefaceA { void testA(); void testB(); void tes ...

  4. 【转】ByteArrayOutputStream和ByteArrayInputStream详解

    ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的 ...

  5. 【转】Linux中如何安装.rpm、.tar、.tar.gz和tar.bz2

    我以下面三个包为例:(三个包都在/etc/opt下)A.example-1.2.3-1.rpmB.example-1.2.3-1.tarC.example-1.2.3-1.tar.gz 1.对于rpm ...

  6. php接口和多态的概念以及简单应用

    接口是面向对象中的一个重要特性,也是面向对象开发不可缺少的一个概念,下面简单说一下接口的概念,先看一段简单的代码: interface ICanEat { public function eat($f ...

  7. MongoDB副本集学习(一):概述和环境搭建

    MongoDB副本集概述 以下图片摘自MongoDB官方文档:http://docs.mongodb.org/manual/core/replication-introduction/ Primary ...

  8. Sass 中的 @ 规则

    一. @import Sass 扩展了 CSS 的 @import 规则,让它能够引入 SCSS 和 Sass 文件. 所有引入的 SCSS 和 Sass 文件都会被合并并输出一个单一的 CSS 文件 ...

  9. [MAC ] Mac-OSX下安装Git

    转载自 : http://www.cnblogs.com/shanyou/archive/2011/01/30/1948088.html Mac-OSX下安装Git是一件很简单的事,我们可以下载一个安 ...

  10. Android开发之onClick事件的三种写法

    package a.a; import android.app.Activity; import android.os.Bundle; import android.view.View; import ...