哪位大侠帮我看看我写的55 皇后问题 运行后最后一个结果出不来,只有前4个

2025-04-25 03:36:39
推荐回答(1个)
回答1:

//C语言和C++中数组的下标都是从0开始
//到n-1结束(其中n是数组的大小)

#include
#include
#include
//5*5棋盘上放5个皇后
int modify(int a) /*修正,若皇后所在位置的对角线下一行或列不存在则跳到第一行或列重新开始*/
{
if(a>4)
a-=5;
else if(a<0)
a+=5;
else
a=a;
return a;
}
bool check(int a,int b,int c[5][5]) /*检查,若行 列 对角上的元素和不超过1,则返回true,否则返回false*/
{
bool result=true;
int row=0,line=0,diag=0,diag1=0; /*row 列和, line 行和, diag 下对角线元素和,diag1 上对角线元素和*/
int temp1,temp3,temp4; //修正后的数组坐标

for(int i=0;i<5;i++)
{
temp1=modify(a+i);
temp3=modify(b+i);
temp4=modify(b-i);
row+=c[a][i];
line+=c[i][b];
diag+=c[temp1][temp3];
diag1+=c[temp1][temp4]; /*循环结束后得到 c[a][b]元素 所在的 列和,行和,上下对角线和*/
}
if(row>1||line>1||diag>1||diag1>1)
result=false; //若其中有一个和超过1,则返回false
return result;
}

void main()
{
int a[5][5],i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
a[i][j]=0; /*生成一个5*5矩阵,所有元素为0*/
a[1][1]=1; //第一个皇后放在 (1,1)上
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
a[i][j]=1;
if(check(i,j,a)==false) /*检查任意 (i,j)位置上放皇后是否能通过check,若不通过则改回0*/
a[i][j]=0;
else
cout<<"a["<}
}
}