《算法棋盘覆盖C++实现.doc》由会员分享,可在线阅读,更多相关《算法棋盘覆盖C++实现.doc(2页珍藏版)》请在三一文库上搜索。
1、#include<iostream> #include<iomanip> using namespace std;int tile=0;int *(*board)=NULL;/ 定义指向指针的指针用于动态的创建用于存储骨牌号的数组int main()void chessBoard(int tr, int tc, int dr, int dc, int size);/ 声明函数int tx=0,ty=0,dx,dy,zsize;/ 定义棋盘的左上角方格、特殊方格的行号和列号以及棋盘大小 cout<<" 请输入特殊方格的行号、列号以及棋盘的大小n&qu
2、ot;/ 其实用户输入cin>>dx>>dy>>zsize;*动态的创建二维数组 */board=new int *zsize; for(int i=0;i<zsize;i+) boardi=new intzsize;/*动态创建数组结束 */boarddxdy=0;/ 特殊方格用 0 填充chessBoard(tx,ty,dx,dy,zsize);/ 输出结果for(int j=0;j<zsize;j+) for(int m=0;m<zsize;m+) cout<<setw(4)<<boardjm;cout<
3、<endl;return 0;void chessBoard(int tr, int tc, int dr, int dc, int size)if (size = 1) return;int t = tile+, / L 型骨牌号 s = size/2; / 分割棋盘/ 覆盖左上角子棋盘if (dr < tr + s && dc < tc + s) / 特殊方格在此棋盘中chessBoard(tr, tc, dr, dc, s); else / 此棋盘中无特殊方格/ 用 t 号 L 型骨牌覆盖右下角boardtr + s - 1tc + s - 1 = t;
4、 / 覆盖其余方格chessBoard(tr, tc, tr+s-1, tc+s-1, s);/ 覆盖右上角子棋盘if (dr < tr + s && dc >= tc + s)/ 特殊方格在此棋盘中 chessBoard(tr, tc+s, dr, dc, s);else / 此棋盘中无特殊方格/ 用 t 号 L 型骨牌覆盖左下角 boardtr + s - 1tc + s = t;/ 覆盖其余方格chessBoard(tr, tc+s, tr+s-1, tc+s, s); / 覆盖左下角子棋盘if (dr >= tr + s && dc &
5、lt; tc + s)/ 特殊方格在此棋盘中 chessBoard(tr+s, tc, dr, dc, s);else /用t号L型骨牌覆盖右上角 boardtr + stc + s - 1 = t;/ 覆盖其余方格chessBoard(tr+s, tc, tr+s, tc+s-1, s);/ 覆盖右下角子棋盘if (dr >= tr + s && dc >= tc + s)/ 特殊方格在此棋盘中 chessBoard(tr+s, tc+s, dr, dc, s);else / 用 t 号 L 型骨牌覆盖左上角 boardtr + stc + s = t;/ 覆盖其余方格 chessBoard(tr+s, tc+s, tr+s, tc+s, s);