填充方格
来源:互联网 发布:app数据采集工具 编辑:程序博客网 时间:2024/04/27 12:29
设一个n*n棋盘,n=2^k,用L 型条块覆盖棋盘中除一个指定方格外的所有方格,每个L型条块可恰好覆盖3 个方格。例:假设n=8,指定左上角不能被覆盖,棋盘的一种覆盖方式如下。
运用了递归回溯的思想
#include "stdio.h"#define N 8int a[N][N]; int chessBoard(int tr,int tc,int dr,int dc,int s,int t){if(s==0)return 0;if(dr<tr+s && dc<tc+s)//左上角chessBoard(tr,tc,dr,dc,s/2,t+1);else{a[tr+s-1][tc+s-1]=t;chessBoard(tr,tc,tr+s-1,tc+s-1,s/2,t+1);output();}if(dr<tr+s && dc>tc+s-1)//左下角chessBoard(tr,tc+s,dr,dc,s/2,t+1+s*s);else{a[tr+s-1][tc+s]=t;chessBoard(tr,tc+s,tr+s-1,tc+s,s/2,t+1+s*s);output();}if(dr>tr+s-1 && dc<tc+s)//右上角chessBoard(tr+s,tc,dr,dc,s/2,t+1+2*s*s);else{a[tr+s][tc+s-1]=t;chessBoard(tr+s,tc,tr+s,tc+s-1,s/2,t+1+2*s*s);output();}if(dr>tr+s-1 && dc>tc+s-1)//右下角chessBoard(tr+s,tc+s,dr,dc,s/2,t+1+3*s*s);else{a[tr+s][tc+s]=t;chessBoard(tr+s,tc+s,tr+s,tc+s,s/2,t+1+3*s*s);output();}}int output(){int i,j;for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[j][i]);putchar('\n');}putchar('\n');return 0;}int main(){int i,j;int dr,dc,tr,tc,s;int t=1;s=N;dr=3;dc=0;tr=tc=0;a[6][6]=0;chessBoard(tr,tc,dr,dc,s/2,t);output();return 0;}
0 0
- 填充方格
- 蓝桥杯-填充方格
- POJ 2411 + POJ 2663 + POJ 3420 小方格填充之多米诺骨牌系列(状压DP)
- 方格游戏
- 跳方格
- 摆方格
- 摆方格
- 方格难题
- 踩方格
- 方格问题
- 打印方格
- 摆方格
- 踩方格
- 打印方格
- 踩方格
- 数字方格
- 踩方格
- 摆方格
- textarea换行符的显示
- 一致性hash算法的实现
- 数据库制定字符集
- 毕达哥拉斯三元组:poj 1305+佩尔方程:poj 1320,hdu 3292(特殊不定方程)
- TextView的一些重要属性
- 填充方格
- 实用小软件推荐
- android之Dialog自定义引发的血案
- ASP.NET的FusionChart制作图表
- 《Cocos2d学习之路》六、小实践-象棋,简单AI对战
- Android学习系列(39)--Android主题和样式之系统篇(上)
- 在Centos上安装wordpress
- Android LCD(二):LCD常用接口原理篇
- android socket传递有标识的值和读取值