八皇后问题:要求在一个8*8的棋盘上放8个皇后,使得它们不互相攻击,一个皇后可以攻击处在同一行或同一列或同一斜线。
解的形式:x[1:n]表示皇后i放在i行的x[i]列
剪枝条件:x[i]=x[j] |j-i|=x[j]-x[i]
int nocollison(int k)
{
int j=1;
while(j<k)
{
if(x[j]==x[k]||(abs(x[j]-x[k]))==abs(j-k))
return 0;
j++;
}
return 1;
}
void place(int k,int n)
{
if(k>n)
{
for(int i=1;i<=n;i++)
cout<<x[i]<<"";
cout<<endl;
}
for(int i=1;i<=n;i++)
{
x[k]=i;
if(nocollision(k))
place(k+1,n);
x[k]=0;
}
}
4259



被折叠的 条评论
为什么被折叠?



