一个八皇后的问题(搜索回溯),跪求大神指出错误!
理论答案应该有92种!我的只有2种,不懂哪里错了!#include<iostream>
using namespace std;
int sum, a;
int pd(int x,int y )// 判断x行y列是否可以放皇后
{
int i,j;
for(i=0;i<x;i++) // 判断头上是否有皇后
{
if(a)
return 0;
}
for(i=x-1,j=y-1;i>=0,j>=0;i--,j--)//判断左上方
{
if(a)
return 0;
}
for(i=x-1,j=y+1;i>=0,j<8;i--,j++)//判断右上方
{
if(a) //因为是从上到下的放法 ,所以不需要判断左下方和右下方
return 0;
}
return 1; //可以放的话返回1
}
int search(int k)
{
int i;
for(i=0;i<8;i++)
{
if(pd(k,i)) //符合条件
{
a=1;//放入皇后
if(7==k)
{
cout<<sum++<<endl; //如果放满8个就打印
for(int m=0;m<8;++m)
{
for(int n =0;n<8;++n)
{
cout<<a<<" ";
}
cout<<endl;
}
}
else
search(k+1); //搜索下一个位置
a=0; //回溯
}
}
}
int main()
{
int i,j;
for(i=0;i<8;++i)
for(j=0;j<8;++j)
a=0; //初始化
search(0);
return 0;
} 左下方与右下方没有判断 claws0n 发表于 2018-8-12 20:23
左下方与右下方没有判断
不用的 因为我是从上到下摆放棋子的 条件判断的那个地方好像应该是&&的关系
页:
[1]