/*
功能: 求解放置n皇后方案的个数。
输入:
无
返回:
int:放置n皇后方案的个数
*/
int PlaceQueenMethodNum(int n)
{
int matrix[100]={0};//皇后放置的列数
int sum=0;//可行解的个数
if(n<=3)
{
return 0;
}
queen(1,n,sum,matrix);
//printf("sum=%d\n",sum);
return sum;
}
/*
t-1行已经放置皇后
*/
void queen(int t,int n,int &sum,int matrix[100])
{
if(t>n)
{
sum++;
}
for(int i=1;i<=n;i++)//遍历每一列
{
matrix[t]=i;//放置棋子
if(canPlace(matrix,t,n)){
queen(t+1,n,sum,matrix);//放置下一个棋子
}
}
}
/*
在第t行的棋子是否合理
可以 返回1
不行 返回0
*/
int canPlace(int matrix[100],int t,int n)
{
for(int i=1;i<t;i++)
{
if(matrix[t]==matrix[i]||abs(i-t)==abs(matrix[i]-matrix[t]))
{
return 0;
}
}
return 1;
}
N皇后问题 c++
最新推荐文章于 2022-05-26 11:01:31 发布