棋盘覆盖问题C++代码
2011-06-29 12:36
585 查看
#include<iomanip.h> #include<iostream.h> #include<stdlib.h> int tile=0; //定义全局变量tile表示L型骨牌编号 int **chessarr; //定义全局变量chessarr表示棋盘数组 void chessboard(int row0,int col0,int size,int sprow,int spcol); // 棋盘覆盖函数 // row0,col0为棋盘左上角位置,sprow,spcol为特殊方格位置 // size为棋盘规模 void chessboard(int row0,int col0,int size,int sprow,int spcol) //棋盘覆盖函数 { if(size==1) return; //如果棋盘规模=1,返回 int s=size/2; //分割棋盘 int t=++tile; //L型骨牌编号加1 //处理左上角子棋盘 if(sprow < row0+s && spcol < col0+s) chessboard(row0,col0,s,sprow,spcol); else { chessarr[row0+s-1][col0+s-1]=t; chessboard(row0,col0,s,row0+s-1,col0+s-1); } //处理右上角子棋盘 if(sprow < row0+s && spcol >= col0+s) chessboard(row0,col0+s,s,sprow,spcol); else { chessarr[row0+s-1][col0+s]=t; chessboard(row0,col0+s,s,row0+s-1,col0+s); } //处理左下角子棋盘 if(sprow >= row0+s && spcol < col0+s) chessboard(row0+s,col0,s,sprow,spcol); else { chessarr[row0+s][col0+s-1]=t; chessboard(row0+s,col0,s,row0+s,col0+s-1); } //处理右下角子棋盘 if(sprow >= row0+s && spcol >= col0+s) chessboard(row0+s,col0+s,s,sprow,spcol); else { chessarr[row0+s][col0+s]=t; chessboard(row0+s,col0+s,s,row0+s,col0+s); } } void main() { int k,x,y; //阶数及特殊点位置 int i,j,n; //棋盘规模为 n*n cout<<"请输入棋盘的阶数:"; cin>>k; cout<<"请输入特殊点的位置(从1开始):"; cin>>x>>y; for (i=0,n=1;i<k;i++) n*=2; //在堆内存中建立棋盘数组,填充特殊方格 if((chessarr=new int* )==NULL) { cout << "Can't allocate more memory,terminating." << endl; exit (1); } for (i=0;i<n;i++ ) { if((chessarr[i]=new int )==NULL) { cout << "Can't allocate more memory,terminating." << endl; exit (1); } } chessarr[x-1][y-1]=0; // 填写特殊方格 tile=0; chessboard(0,0,n,x-1,y-1); //进行棋盘覆盖,左上角位置0,0; 棋盘宽度n; 特殊点x,y for (i=0;i<n;i++) { for (j=0;j<n;j++ ) { cout << setw(5) << chessarr[i][j]; } cout << endl; } //释放内存 for(i=0;i<n;i++) delete[] chessarr[i]; delete[] chessarr; return; } |
相关文章推荐
- 棋盘的完美覆盖问题,c++代码实现
- 棋盘的完美覆盖问题,c++代码实现
- 棋盘的完美覆盖问题,c++代码实现
- 棋盘覆盖问题C++版
- 分治算法之 棋盘覆盖问题(完整代码实现)
- C++棋盘覆盖问题源代码以及运行结果
- c++解决棋盘覆盖问题
- 棋盘覆盖问题 - 分治法(c++)
- 分治算法---棋盘覆盖问题java代码实现
- c++解决棋盘覆盖问题
- 棋盘覆盖问题 C++实现11
- python版棋盘覆盖问题核心代码
- 【poj 1321】 棋盘问题 题解&题意&代码(C++)
- Eclipse c++代码提示,覆盖下面代码的问题。
- 棋盘覆盖问题
- 算法小白总结(三)-----分治法&&棋盘覆盖问题
- 棋盘覆盖问题 - 分治法
- 棋盘覆盖问题(分治)
- protobuf如何用proto文件导出C++代码文件及链接protobuf静态库问题
- 最大子数组问题-c++代码实现及运行实例结果