抹语 发表于 2018-8-12 19:03:17

一个八皇后的问题(搜索回溯),跪求大神指出错误!

理论答案应该有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:42

左下方与右下方没有判断

抹语 发表于 2018-8-12 22:11:00

claws0n 发表于 2018-8-12 20:23
左下方与右下方没有判断

不用的   因为我是从上到下摆放棋子的

幻影幽灵-ghost 发表于 2018-8-16 08:49:47

条件判断的那个地方好像应该是&&的关系
页: [1]
查看完整版本: 一个八皇后的问题(搜索回溯),跪求大神指出错误!