博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分治算法经典案例 - 棋盘问题
阅读量:5054 次
发布时间:2019-06-12

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

 2017-08-26 20:18:50

writer:pprp

问题大概描述:

有一个2k2k的方格棋盘,恰有一个方格是黑色的,其他为白色。你的任务是用包含3个方格的L型牌覆盖所有白色方格。

黑色方格不能被覆盖,且任意一个白色方格不能同时被两个或更多牌覆盖。

用分治法来解决,分治的时候要确定状态,需要什么状态,结束条件

结束条件是size规模变成了1的时候,就要退出了;

需要的状态,起始点,黑色块的位置,size边长

/*@theme:棋盘用L型的块堆满@writer:pprp@declare:最经典的分治算法@date:2017/8/26*/#include 
#include
using namespace std;const int maxn = 10000;int chess[maxn][maxn];int number;void chessBoard(int row, int column, int x, int y, int Size){ if(Size == 1) return ;//退出条件 int ss = Size/2;//分治,规模减半 int t = ++number; int centerRow = row + ss; int centerColumn = column + ss; //开始判断四个方向 //左上角判断 if(x < centerRow && y < centerColumn) { chessBoard(row,column,x,y,ss); } else { chess[centerRow-1][centerColumn-1] = t; chessBoard(row,column,centerRow-1,centerColumn-1,ss); } //右上角判断 if(x < centerRow && y >= centerColumn) { chessBoard(row,centerColumn,x,y,ss); } else { chess[centerRow-1][centerColumn] = t; chessBoard(row,centerColumn,centerRow-1,centerColumn,ss); } //左下角判断 if(x >= centerRow && y < centerColumn) { chessBoard(centerRow,column,x,y,ss); } else { chess[centerRow][centerColumn-1] = t; chessBoard(centerRow,column,centerRow,centerColumn-1,ss); } //右下角判断 if(x >= centerRow && y >= centerColumn) { chessBoard(centerRow,centerColumn,x,y,ss); } else { chess[centerRow][centerColumn] = t; chessBoard(centerRow,centerColumn,centerRow,centerColumn,ss); } }int main(){ int Size; int x, y; while(cin >> Size && Size) { memset(chess, 0, sizeof(chess)); cin >> x >> y; chessBoard(0,0,x,y,Size); chess[x][y] = number = 1; for(int i = 0 ; i < Size; i++) { for(int j = 0 ; j < Size ; j++) { cout << chess[i][j]<< "\t"; } cout << endl << endl;; } } return 0;}

 

转载于:https://www.cnblogs.com/pprp/p/7436291.html

你可能感兴趣的文章
蓝桥杯-分小组-java
查看>>
Java基础--面向对象编程1(类与对象)
查看>>
Android Toast
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
关于js sort排序方法
查看>>
JAVA面试常见问题之Redis篇
查看>>
javascript:二叉搜索树 实现
查看>>
网络爬虫Heritrix源码分析(一) 包介绍
查看>>
__int128的实现
查看>>
R 读取clipboard内容 (MAC)
查看>>
Problem - 1118B - Codeforces(Tanya and Candies)
查看>>
jdk1.8 api 下载
查看>>
svn 图标不显示
查看>>
getElement的几中属性介绍
查看>>
iOS 使用Quartz 2D画虚线 【转】
查看>>
平面最接近点对
查看>>
HTML列表,表格与媒体元素
查看>>