八皇后的基本要求是这样的:在一个8*8的矩阵上面放置8个物体,一个矩阵点只允许放置一个物体,任意两个点不能在一行上,也不能在一列上,不能在一条左斜线上,当然也不能在一条右斜线上。
参考网上资料改写
代码如下:
#include<iostream>
#include<queue>
#include<math.h>
#include<fstream>
using namespace std;
#define N 8 // 棋盘的格数
int chess[N][N] = {0}; // 棋盘
int numofway = 0; // 有多少种放法
int iscanput(int row, int col) // 确定某一格能不能放
{
int i,j;
for(i = 0; i < N; i ++)
{
if(chess[i][col] == 1) //有 同列的
{
return 0;
}
for(j = 0; j < N; j++)
{
if(chess[row][j]==1) //有同行的
{
return 0;
}
if(((i-row)==(j-col)||(i-row)==(col-j))&&chess[i][j]==1) // 对角线上有的
{
return 0;
}
}
}
return 1;
}
void print_chess()
{
for (int i=0;i<N;i++)
{
for (int j=0;j<N;j++)
{
printf("%d",chess[i][j]);
}
printf("\n");
}
printf("\n");
}
int put_chess(int row)
{
int i,result;
for (i=0;i<N;i++)
{
if (iscanput(row,i))//如果此处能放
{
chess[row][i]=1;//该格置为1,表明已放下
if (row==N-1)//最后一行
{
numofway++;
print_chess();
chess[row][i]=0;//放完N个皇后后重置
continue;
}
result=put_chess(row+1);//搜索下一行
if (result==0)//下一行不能放
{
chess[row][i]=0;
continue;
}
else
{
break;
}
}
}
if (i==N)//如果这一行的每一空格都不能放
{
return 0;
}else
{
return 1;
}
}
int main()
{
int result ;
result = put_chess(0); // 放置
printf("the number of put way is %d\n", numofway); //打印信息
return 0;
}