棋盘覆盖【递归分治法】
来源:互联网 发布:网络暴力 论文 编辑:程序博客网 时间:2024/05/18 22:40
棋盘覆盖问题的讨论,求解
题目是这样的:N*N的棋盘上,需要用L型骨牌覆盖,只能保证一个特殊字格空出来,给出特殊字格的位置,求出所有的L型骨牌的摆放位置。
#include<iostream>using namespace std;#define n 16#define a 1#define b 1int Board[n][n];int t=0;void Input();void ChessBoard(int tr,int tc,int dr,int dc,int size);void Print();int main(){ Input(); ChessBoard(0,0,a,b,n); Print(); return 0;}void Input(){ int i,j; for(i=0; i<n;i++) for(j=0; j<n;j++) Board[i][j]=-1; Board[a][b]=0;}void ChessBoard(int tr,int tc,int dr,int dc,int size){ if(size==1) return ; t++; int x=t;//这一步至关重要,它将是每次递归的同一层次的编号不变 size=size/2; if(tr+size>dr && tc+size>dc) ChessBoard(tr,tc,dr,dc,size); else{ Board[tr+size-1][tc+size-1]=x; ChessBoard(tr,tc,tr+size-1,tc+size-1,size);//看这里 } if(tr+size<=dr && tc+size>dc) ChessBoard(tr+size,tc,dr,dc,size); else{ Board[tr+size][tc+size-1]=x; ChessBoard(tr+size,tc,tr+size,tc+size-1,size); } if(tr+size>dr && tc+size<=dc) ChessBoard(tr,tc+size,dr,dc,size); else{ Board[tr+size-1][tc+size]=x; ChessBoard(tr,tc+size,tr+size-1,tc+size,size); } if(tr+size<=dr && tc+size<=dc){ ChessBoard(tr+size,tc+size,dr,dc,size); } else{ Board[tr+size][tc+size]=x; ChessBoard(tr+size,tc+size,tr+size,tc+size,size); }}void Print(){ int i,h; for(i=0;i<n;i++){ for(h=0;h<n;h++) cout<<Board[i][h]<<" "; cout<<endl; }}
笔记:这是一个用分治递归的思想写的算法、第一次发出来的时候,有朋友评论帮助我找出了问题,确实在递归的运行过程中,很容易发生这种所谓的参数丢失和参数混乱的问题,进行变量是一个好办法,对于这种问题的处理。
问题:很不幸,问题又发生了,在数量级增加的同时,数据出现了很大的问题,给出截图如下,求讨论。
欢迎大家给出自己的意见。
解决方案:
其实这个问题挺傻的,最后经过我坤神的严密搜查,结果找到的原因是在C++中中括号的编译问题。在代码里有个地方注释着“看这里”,这个错误就是之前把“()”写成了“[]”,造成的。
在C++中这种错误不知道为什么会给编译,但是c语言中还是没有的,所以觉得c的编译还是很给力的,c++的编译很有问题。
这个是最终的图:
阅读全文
2 0
- 棋盘覆盖【递归分治法】
- 棋盘覆盖(分治-递归)
- 棋盘覆盖(分治、递归)
- 棋盘覆盖问题-递归分治
- [分治,递归]棋盘覆盖问题
- 分治法,棋盘覆盖
- 分治法:棋盘覆盖
- 棋盘覆盖--分治法
- 递归与分治之 棋盘覆盖
- 递归与分治之棋盘覆盖
- 棋盘覆盖问题(递归与分治)
- [递归与分治]棋盘覆盖问题
- 递归分治解决棋盘覆盖问题
- 棋盘覆盖--递归分治java实现
- 递归与分治之棋盘覆盖问题
- 棋盘覆盖递归与分治算法
- 棋盘覆盖(分治加递归)
- 递归与分治中的棋盘覆盖问题
- JVM自带性能分析工具介绍——JPS
- spring boot+mybatis 多数据源切换
- 获取文件大小
- poj 3301 Texas Trip 题解
- MySql学习笔记(一)
- 棋盘覆盖【递归分治法】
- window安装Python环境
- 比赛10 总结
- c3p0联合struts2与DBUtils组件连接SQL Server 2008数据库
- 【2017新疆网络赛】H Skiing 最短路径spfa 模版
- 求一个数组中前K大的数或者第K大的数
- python运行出现IDLE's subprocess didn't make connection. Either IDLE can't start or personal firewal的解决方案
- FPGA与DSP5509A通过MCBSP接口通信
- PAT 乙级-1025 链表反转