经典的K皇后问题在这里不再复述。
新问题是这样的,在一个M*N的棋盘上,放置K个皇后,其中任意两个皇后不能在同一行,不能在同一列,也不能在同一对角线,问有几种办法放置这K个皇后,废话少说,直接上程序。
#include<stdio.h>
#include<math.h>
const int MAX_LENGTH = 1000;
int M,N,K; //这里为了方便用了全局变量,M表示棋盘的行数,N表示棋盘的列数,K表示皇后个数
int methodCount;
int flag[MAX_LENGTH];//flag[i]表示第i行所放的皇后在第flag[i]列,flag[i]=-1表示该行未放皇后
bool judge(int rowNum,int colNum)
{
int i;
bool f = true;
for(i=0;i<rowNum;i++)
if(flag[i]==colNum|| (rowNum-i)==abs(colNum-flag[i]))
{
f = false;
break;
}
return f;
}
void recursive(int currentRow,int queensLeft)
{
if(queensLeft==0)
{
//已经找到一种复合条件的放置方式
methodCount++;
return;
}
else if((M-currentRow)<queensLeft)
//此处表示剩下的行数已经不足以放置还未放置完的皇后个数
return;