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:43 编辑
我悟了 判断左上右上的for语句里面没有&&,应该是 for(;i1>=0&&j1>=0;i1--,j1--), 这样我就又有一个新问题了,不加&&的话取值范围不应该范围更大吗,为什么输出的方案反而更少了呢? for(i1=i-1,j1=j+1;i1>=0,j1<=7;i1--,j1++)
多个逗号分开的话 只取最后一个表达式的值来判断
你这只相当于只有一个条件 : j1<=7 万千只cnm 发表于 2021-7-17 21:38
多个逗号分开的话 只取最后一个表达式的值来判断
你这只相当于只有一个条件 : j1
嗷嗷,我想反了,取值范围大了符合的可能性就少了,三克油
页:
[1]