AOJ.859 地毯填补问题 (递归与分治)

题意分析

学习分治思想,第一次接触,

代码总览

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <sstream>
  6. #include <set>
  7. #include <map>
  8. #include <queue>
  9. #include <stack>
  10. #include <cmath>
  11. #define INF 0x3f3f3f3f
  12. #define nmax 200
  13. #define MEM(x) memset(x,0,sizeof(x))
  14. using namespace std;
  15. int k;
  16. void work(int x,int y,int l,int temp,int fx,int fy)
  17. {
  18. if(temp==1){
  19. if(fx==x && fy==y){
  20. printf("%d %d %d\n",fx+1,fy+1,1);
  21. return;
  22. }
  23. if(fx==x && fy!=y){
  24. if(fx+1==7 && fy-1==2)
  25. fx=6;
  26. printf("%d %d %d\n",fx+1,fy-1,2);
  27. return;
  28. }
  29. if(fx!=x && fy==y){
  30. printf("%d %d %d\n",fx-1,fy+1,3);
  31. return;
  32. }
  33. printf("%d %d %d\n",fx-1,fy-1,4);return;
  34. }
  35. int nx,ny,nl=l/2;
  36. nx=x+nl;
  37. ny=y+nl;
  38. if(fx>=x && fx<nx && fy>=y && fy<ny){
  39. printf("%d %d %d\n",nx,ny,1);
  40. work(x,y,nl,temp-1,fx,fy);
  41. work(x,ny,nl,temp-1,nx-1,ny);
  42. work(nx,y,nl,temp-1,nx,ny-1);
  43. work(nx,ny,nl,temp-1,nx,ny);
  44. return;
  45. }
  46. if(fx>=x && fx<nx && fy>=ny){
  47. printf("%d %d %d\n",nx,ny-1,2);
  48. work(x,y,nl,temp-1,nx-1,ny-1);
  49. work(x,ny,nl,temp-1,fx,fy);
  50. work(nx,y,nl,temp-1,nx,ny-1);
  51. work(nx,ny,nl,temp-1,nx,ny);
  52. return;
  53. }
  54. if(fx>=nx && fy>=y && fy<ny){
  55. printf("%d %d %d\n",nx-1,ny,3);
  56. work(x,y,nl,temp-1,nx-1,ny-1);
  57. work(x,ny,nl,temp-1,nx-1,ny);
  58. work(nx,y,nl,temp-1,fx,fy);
  59. work(nx,ny,nl,temp-1,nx,ny);
  60. return;
  61. }
  62. printf("%d %d %d\n",nx-1,ny-1,4);
  63. work(x,y,nl,temp-1,nx-1,ny-1);
  64. work(x,ny,nl,temp-1,nx-1,ny);
  65. work(nx,y,nl,temp-1,nx,ny-1);
  66. work(nx,ny,nl,temp-1,fx,fy);
  67. return;
  68. }
  69. int main ()
  70. {
  71. //freopen("in.txt","r",stdin);
  72. int x,y,len =1,i;
  73. scanf("%d",&k);
  74. scanf("%d %d",&x,&y);
  75. i = k;
  76. while (i--) len*=2;
  77. work(1,1,len,k,x,y);
  78. }

AOJ.859 地毯填补问题 (递归与分治)的更多相关文章

  1. 浅谈分治 —— 洛谷P1228 地毯填补问题 题解

    如果想看原题网址的话请点击这里:地毯填补问题 原题: 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子 ...

  2. [洛谷P1228]地毯填补问题 题解(分治)

    Description 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的 ...

  3. P1228 地毯填补问题(分治)

    P1228 地毯填补问题(分治) 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将 ...

  4. 洛谷P1228 地毯填补问题

    P1228 地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站 ...

  5. 【递归与分治】 poj 1017

    递归与分治经典例题    要点在于对3*3箱子的讨论 #include <iostream> #include <cstdio> using namespace std; in ...

  6. 递归与分治策略之循环赛日程表Java实现

    递归与分治策略之循环赛日程表 一.问题描述 设有n=2^k个运动员要进行网球循环赛.现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: (2)每个选手一天只能参赛一 ...

  7. 递归与分治策略之棋盘覆盖Java实现

    递归与分治策略之棋盘覆盖 一.问题描述 二.过程详解 1.棋盘如下图,其中有一特殊方格:16*16 . 2.第一个分割结果:8*8 3.第二次分割结果:4*4 4.第三次分割结果:2*2 5.第四次分 ...

  8. [图解算法] 归并排序MergeSort——<递归与分治策略>

    #include"iostream.h" void Merge(int c[],int d[],int l,int m,int r){ ,k=l; while((i<=m)& ...

  9. 洛谷 P1228 【地毯填补问题】

    事实上感觉四个的形状分别是这样: spj报错: 1:c 越界 2:x,y 越界 3:mp[x][y] 已被占用 4:mp[x][y] 从未被使用 题解: 初看这个问题,似乎无从下手,于是我们可以先考虑 ...

随机推荐

  1. 使用.net 更新word目录

    方案一.采用OpenXml(服务器不依赖Office组件) 在word生成的最后加上代码: using (WordprocessingDocument docx = WordprocessingDoc ...

  2. 树(Tree,UVA 548)

    题目描述: 题目思路: 1.使用数组建树 //递归 2.理解后序遍历和中序遍历,建立左右子树 3.dfs深度搜索找出权重最小的路径 #include <iostream> #include ...

  3. MATLAB画图符号标注

    线型 说明 标记符 说明 颜色 说明 - 实线(默认) + 加号符 r 红色 -- 双划线 o 空心圆 g 绿色 : 虚线 * 星号 b 蓝色 :. 点划线 . 实心圆 c 青绿色 x 叉号符 m 洋 ...

  4. 前端整合MathjaxJS的配置笔记

    这篇文章是我给Pinghsu主题添加数学公式功能的一个小教程,包含我大量的官方文档阅读后的实践,跟着这篇配置教程走,你可以做到给任何一个需要数学公式的站点添加支持. 教程如标题所述是针对 Mathja ...

  5. vscode开发智能合约

    开发工具 EOS 开发终极神器-vscode (你绝对找不到的干货) lome · 2018年04月19日 · 最后由 18636292520 回复于 2018年09月15日 · 15672 次阅读 ...

  6. MySQL Proxy使用

    使用MySQL将读写请求转接到主从Server. 一 安装MySQL Proxy MySQL Proxy的二进制版非常方便,下载解压缩后即用. 解压缩的目录为: $mysql-proxy_instal ...

  7. mysql source 恢复 sql数据time_zone报错 已解决

    报了一些变量的错误,类似于"time_zone" 等错误 解决: [root@iz8vbilqy0q9v8tds55bqzz conf.d]# vi /etc/my.cnf [my ...

  8. JavaScript中的事件代理/委托

    事件委托在JS高级程序设计中的定义为"利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件" 如何理解上面的这句话呢,在网上,大牛们一般都使用收快递这个例子来解释的, ...

  9. 自测之Lesson12:信号量

    题目:创建一个包含5个信号量的信号集. 完成代码: #include <stdio.h> #include <sys/ipc.h> #include <sys/sem.h ...

  10. spring框架(2)— 面相切面编程AOP

    spring框架(2)— 面相切面编程AOP AOP(Aspect Oriented Programming),即面向切面编程. 可以说是OOP(Object Oriented Programming ...