酱油王 发表于 2021-7-17 17:33:03

S1E36 八皇后

兄弟们,大佬们,八皇后我代码只有51种方法,找不到错在哪,跪求大佬们帮帮我!!!!
#include <stdio.h>

void function(int one,int);
int function2(int one,int i,int j);

int jishu=0;

void function(int one,int a)
{
        if(a==8)
        {
                jishu++;
                printf("%d\n",jishu);
                int c,d;
                for(c=0;c<8;c++)
                {
                        for(d=0;d<8;d++)
                        {
                                printf("%d ",one);
                        }
                        putchar('\n');
                }
                putchar('\n');
                return;
        }
       
        int j;
               
        for(j=0;j<8;j++)
        {
               
                if((function2(one,a,j))==1)
                {
                        one=1;
                        function(one,a+1);
                        one=0;       
                }
        }
               
       
}

int function2(int one,int i,int j)//判断该位置是否符合条件
{
        int i1=i-1,j1=j-1;
        for(;i1>=0,j1>=0;i1--,j1--)//左上
        {
                if (one==1)
                {
                        return 0;
                }
        }
        for(i1=i-1,j1=j+1;i1>=0,j1<=7;i1--,j1++)//右上
        {
                if (one==1)
                {
                        return 0;
                }
        }
        for(i1=i-1;i1>=0;i1--)//列
        {
                if (one==1)
                {
                        return 0;
                }
        }
               
        return 1;
       
}

int main()
{
        int one;
        int c,d;
                for(c=0;c<8;c++)
                {
                        for(d=0;d<8;d++)
                        {
                                one=0;
                        }
          }
        function(one,0);
       
        return 0;
}

酱油王 发表于 2021-7-17 19:41:17

本帖最后由 酱油王 于 2021-7-17 19:43 编辑

我悟了 判断左上右上的for语句里面没有&&,应该是 for(;i1>=0&&j1>=0;i1--,j1--),   这样我就又有一个新问题了,不加&&的话取值范围不应该范围更大吗,为什么输出的方案反而更少了呢?

万千只cnm 发表于 2021-7-17 21:38:07

for(i1=i-1,j1=j+1;i1>=0,j1<=7;i1--,j1++)

多个逗号分开的话 只取最后一个表达式的值来判断
你这只相当于只有一个条件 : j1<=7

酱油王 发表于 2021-7-18 08:29:45

万千只cnm 发表于 2021-7-17 21:38
多个逗号分开的话 只取最后一个表达式的值来判断
你这只相当于只有一个条件 : j1

嗷嗷,我想反了,取值范围大了符合的可能性就少了,三克油
页: [1]
查看完整版本: S1E36 八皇后