我自己写的八皇后问题,感觉没什么问题,便编译就是通过不了,哪位达人请帮忙看一下,顺便教下二维数组作为参数的话应该怎样操作。谢谢了。如果思路本身有问题的话也欢迎指出,谢谢。
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <math.h>
#include <stdio.h>
#include <fstream>
using namespace std;
#pragma argsused
//判断同一行中是否已有棋子
bool lnRow(int lnE[8][8],int i)
{
for(int Rj=0;Rj<8;Rj++)
if(!lnE[i][Rj])
return false;
return true;
};
//判断同一列中是否已有棋子
bool lnCom(int lnE[8][8],int j)
{
for(int Ci=0;Ci<8;Ci++)
if(!lnE[Ci][j])
return false;
return true;
};
//判断对角线上是否已有棋子
bool lnDui(int lnE[8][8],int i,int j)
{
for(int k=0;k<8;k++)
{
if((i-k)>=0&&(j-k)>=0&&lnE[i-k][j-k])
return false;
else if ((i-k)>=0&&(j+k)<8&&lnE[i-k][j+k])
return false;
else if((i+k)<8&&(j-k)>=0&&lnE[i+k][j-k])
return false;
else if((i+k)<8&&(j+k)<8&&lnE[i+k][j+k])
return false;
}
return true;
};
//将棋子放到棋盘上使满足八皇后的条件
void Eque(int s,int t,int lnEq[8][8])
{ int count=0;
if (lnRow(lnEq[0][],s)
&&nCom(lnEq[0][],t)
&&lnDui(lnEq[0][],s,t))
{
lnEq[s][t]=1;
count=t;
Eque(++s,0,lnEq[0][]);
}
else if(t<8)Eque(s,++t,lnEq[0][]);
else Eque(--s,count+1,lnEq[0][]);
//打印棋盘情况
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
cout<<lnEq[i][j]<<' ';
cout<<endl;
}
};
int main(int argc, char* argv[])
{ int i =0,j =0;
int lnEight[8][8];
for(i=0;i<8;i++)
for(j=0;j<8;j++)
lnEight[i][j]=0;
Eque(0,0,lnEight[0][]);
//-----------------打印棋盘的情况-------------
/* for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
cout<<lnEight[i][j]<<' ';
cout<<endl;
} */
getchar();
return 0;
}
//---------------------------------------------------------------------------