您的位置:首页 > 编程语言 > C语言/C++

N皇后问题 c++

2014-02-27 17:10 281 查看
/*
功能: 求解放置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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: