64,670
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
bool cheak(int[][8],int ,int );
void queen(int [][8],int);
void show(int[][8] , int );
int k = 0; //不知道拿着干什么,我没用了!
int counter= 0;
int main()
{
int a[8][8]={0};
queen(a ,0);
cout<<"Finished!"<<endl;
cin.get();
cin.get();
return 0;
}
void queen (int a[][8], int i)
{
for (int j = 0; j < 8; j++) // 对每一行依次检查
{
if(cheak(a, i, j))
{
a[i][j]=1;
queen(a, i+1);
a[i][j]=0;
}
}
if(i==7) // 到达最后一行后,就输出!
{
/*if(k==8)*/
{
counter++;
show(a, 8);
cout<<"-------------------It's the No."<<counter<<"----------------"<<endl;
}
}
}
void show(int a[][8], int n )
{
for(int i=0; i<n ;i++)
{
for(int j=0 ;j<n ; j++)
{
if (a[i][j]==1)
cout<<"■";
else
cout<<"□";
}
cout<<endl;
}
}
bool cheak(int a[][8],int i,int j )
{
for(int m = 0 ;m < i ; m++) // 检测已经排好的前i个皇后!看是否和前i个皇后冲突!
{
if(a[i][m]==1)return false; //纵向
if(a[m][j]==1)return false; //横向
}
for (int m = i-1, n = j-1; m >= 0 && n >= 0; m--, n-- )
if (a[m][n] == 1) return false;//斜左方
for (int m = i-1, n = j+1; m >= 0 && n < 8; m--, n++ )
if (a[m][n] == 1) return false;//斜右方
return true;
}