主题:5皇后问题找错,少了一个答案
//5皇后问题
#include<iostream.h>
void main()
{
const int m=5,n=5;
int A[m][n],B[18],C[5],l=0;
for(int i=0;i<5;i++)
{
A[0][i]=1;
for(int j=0;j<5;j++)
{
if(j!=i)
A[0][j]=0;
}
for(int o=0;o<5;o++)
{
A[1][o]=1;
for(int p=0;p<5;p++)
{
if(o!=p)
A[1][p]=0;
}
for(int a=0;a<5;a++)
{
A[2][a]=1;
for(int b=0;b<5;b++)
{
if(a!=b)
A[2][b]=0;
}
for(int g=0;g<5;g++)
{
A[3][g]=1;
for(int h=0;h<5;h++)
{
if(g!=h)
A[3][h]=0;
}
for(int z=0;z<5;z++)
{
A[4][z]=1;
for(int x=0;x<5;x++)
{
if(z!=x)
A[4][x]=0;
}
B[0]=A[0][0];//每一条斜线元素和
B[1]=A[1][0]+A[0][1];
B[2]=A[2][0]+A[1][1]+A[0][2];
B[3]=A[3][0]+A[2][1]+A[1][2]+A[0][3];
B[4]=A[4][0]+A[3][1]+A[2][2]+A[1][3]+A[0][4];
B[5]=A[4][1]+A[3][2]+A[2][3]+A[1][4];
B[6]=A[4][2]+A[3][3]+A[1][4];
B[7]=A[4][3]+A[3][4];
B[8]=A[4][4];
B[9]=A[4][0];
B[10]=A[3][0]+A[4][1];
B[11]=A[2][0]+A[3][1]+A[4][2];
B[12]=A[1][0]+A[2][1]+A[3][2]+A[4][3];
B[13]=A[0][0]+A[1][1]+A[2][2]+A[3][3]+A[4][4];
B[14]=A[0][1]+A[1][2]+A[2][3]+A[3][4];
B[15]=A[0][2]+A[1][3]+A[2][4];
B[16]=A[0][3]+A[1][4];
B[17]=A[0][4];
for(int xx=0;xx<=4;xx++)//每列元素之和
{
for(int yy=0;yy<=4;yy++)
{
C[xx]=C[xx]+A[yy][xx];
}
}
if(B[0]<=1&&B[1]<=1&&B[2]<=1&&B[3]<=1&&B[4]<=1&&B[5]<=1&&B[6]<=1&&B[7]<=1&&B[8]<=1//判断同一斜线
&&B[9]<=1&&B[10]<=1&&B[11]<=1&&B[12]<=1&&B[13]<=1&&B[14]<=1&&B[15]<=1&&
B[16]<=1&&B[17]<=1)
{
if(i!=o&&i!=a&&i!=g&&i!=z&&o!=a&&o!=g&&o!=z&&a!=g&&a!=z&&g!=z)//判断同一列
{
l++;
cout<<" ****第"<<l<<"组****"<<endl;
for(int k=0;k<5;k++)
for(int l=0;l<5;l++)
{
cout<<" "<<A[k][l];
if(l==4)
cout<<endl;
}
cout<<endl;
}
}
}
}
}
}
}
}
#include<iostream.h>
void main()
{
const int m=5,n=5;
int A[m][n],B[18],C[5],l=0;
for(int i=0;i<5;i++)
{
A[0][i]=1;
for(int j=0;j<5;j++)
{
if(j!=i)
A[0][j]=0;
}
for(int o=0;o<5;o++)
{
A[1][o]=1;
for(int p=0;p<5;p++)
{
if(o!=p)
A[1][p]=0;
}
for(int a=0;a<5;a++)
{
A[2][a]=1;
for(int b=0;b<5;b++)
{
if(a!=b)
A[2][b]=0;
}
for(int g=0;g<5;g++)
{
A[3][g]=1;
for(int h=0;h<5;h++)
{
if(g!=h)
A[3][h]=0;
}
for(int z=0;z<5;z++)
{
A[4][z]=1;
for(int x=0;x<5;x++)
{
if(z!=x)
A[4][x]=0;
}
B[0]=A[0][0];//每一条斜线元素和
B[1]=A[1][0]+A[0][1];
B[2]=A[2][0]+A[1][1]+A[0][2];
B[3]=A[3][0]+A[2][1]+A[1][2]+A[0][3];
B[4]=A[4][0]+A[3][1]+A[2][2]+A[1][3]+A[0][4];
B[5]=A[4][1]+A[3][2]+A[2][3]+A[1][4];
B[6]=A[4][2]+A[3][3]+A[1][4];
B[7]=A[4][3]+A[3][4];
B[8]=A[4][4];
B[9]=A[4][0];
B[10]=A[3][0]+A[4][1];
B[11]=A[2][0]+A[3][1]+A[4][2];
B[12]=A[1][0]+A[2][1]+A[3][2]+A[4][3];
B[13]=A[0][0]+A[1][1]+A[2][2]+A[3][3]+A[4][4];
B[14]=A[0][1]+A[1][2]+A[2][3]+A[3][4];
B[15]=A[0][2]+A[1][3]+A[2][4];
B[16]=A[0][3]+A[1][4];
B[17]=A[0][4];
for(int xx=0;xx<=4;xx++)//每列元素之和
{
for(int yy=0;yy<=4;yy++)
{
C[xx]=C[xx]+A[yy][xx];
}
}
if(B[0]<=1&&B[1]<=1&&B[2]<=1&&B[3]<=1&&B[4]<=1&&B[5]<=1&&B[6]<=1&&B[7]<=1&&B[8]<=1//判断同一斜线
&&B[9]<=1&&B[10]<=1&&B[11]<=1&&B[12]<=1&&B[13]<=1&&B[14]<=1&&B[15]<=1&&
B[16]<=1&&B[17]<=1)
{
if(i!=o&&i!=a&&i!=g&&i!=z&&o!=a&&o!=g&&o!=z&&a!=g&&a!=z&&g!=z)//判断同一列
{
l++;
cout<<" ****第"<<l<<"组****"<<endl;
for(int k=0;k<5;k++)
for(int l=0;l<5;l++)
{
cout<<" "<<A[k][l];
if(l==4)
cout<<endl;
}
cout<<endl;
}
}
}
}
}
}
}
}