我查到好象是for循环出了问题,可是还是不知道怎么改
程序如下:#include<iostream.h>
#include<stdio.h>
#include<iomanip.h>
int tile=0;
int **Board;
void ChessBoard(int tr,int tc,int dr,int dc,int size)
{
int s;
if(size==1) return;
int t=tile++;//L型骨牌号
//int Board[size][size];
s=size/2;//分割棋盘
//覆盖左上角子棋盘
if(dr<tr+s&&dc<tc+s)//特殊方格在些棋盘中
ChessBoard(tr,tc,dr,dc,s);
else{//此棋盘中无特殊方格
//用T号L型骨牌覆盖右下角
Board[tr+s-1][tc+s-1]=t;
//覆盖其余方格
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{//此棋盘中无特殊方格
Board[tr+s-1][tc+s]=t;
ChessBoard(tr,tc+s,tr+s-1,tc+s,s);}
if(dr>=tr+s&&dc<tc+s)
ChessBoard(tr+s,tc,dr,dc,s);
else{
Board[tr+s][tc+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{
Board[tr+s][tc+s]=t;
ChessBoard(tr+s,tc+s,tr+s,tc+s,s);}
}
void print(int k){
int i,j;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
cout<<setw(4)<<Board[i][j];
cout<<endl;
}
void main()
{
int dr,dc,k;
cout<<"请输入K值:"<<endl<<"k=";
cin>>k;
cout<<"请输入特殊方格的位置dr,dc(中间用空格隔开):"<<endl;
cin>>dr>>dc;
ChessBoard(0,0,dr,dc,k);
cout<<"result:"<<endl;
print(k);
}
最明显的一个错误:
指针未初始化!(要先分配空间)
int **Board;
找遍了整个代码都没找到为它分配内存的语句,然后又对它进行了操作???
Board = new int*[N];
for(int i = 0; i<N; i++)
Board[i] = new int[M];
先给它象上面这样分配内存吧!!