粗暴方法,就前面提到的,八层for循环,写入条件,判断,最终得出结果。
但在后边实现时候突然卡住,想到八个皇后占8*8的位置,第一个皇后随意到一个格子,其他皇后继续随意进入到一个格子,把问题想成了随机摆放,所以卡住了,后边重新简化问题,直接把各个皇后放在固定一行,问题就直接用简单的八层循环就好。
代码如下,可以看到确实实现过程很繁琐,简化的话可以写一个判断函数,然后最后调用,就不用写这么多判断语句了,这里就不实现了,
有时间实现一下汉诺塔再继续总结进来。
int Eque()
{
int tmp = 0;
int que[8];
for(que[0] = 0;que[0] <= 7;++ que[0])
{
for(que[1] = 0;que[1] <= 7;++ que[1])
{
if(que[1] == que[0] || abs(que[1]-que[0]) == 1)
{
continue;
}
for(que[2] = 0;que[2] <= 7;++ que[2])
{
if(que[1]==que[2] || que[0]==que[2] || abs(que[1]-que[2]) == 1 || abs(que[0]-que[2]) == 2)
{
continue;
}
for(que[3] = 0;que[3] <= 7;++ que[3])
{
if(que[3]==que[2] || que[1]==que[3] || que[3]==que[0]|| abs(que[3]-que[2]) == 1 || abs(que[3]-que[1]) == 2 || abs(que[3]-que[0])==3)
{
continue;
}
for(que[4] = 0;que[4] <= 7;++ que[4])
{
if(que[3]==que[4] ||que[2]==que[4]||que[1]==que[4]||que[0]==que[4]|| abs(que[3]-que[4]) == 1 || abs(que[4]-que[2]) == 2 || abs(que[4]-que[1])==3 || abs(que[4]-que[0])==4)
{
continue;
}
for(que[5] = 0;que[5] <= 7;++ que[5])
{
if(que[5]==que[4] ||que[5]==que[3]||que[5]==que[2]||que[5]==que[1]||que[5]==que[0]|| abs(que[5]-que[4])==1 || abs(que[3]-que[5]) == 2 || abs(que[5]-que[2]) == 3 || abs(que[5]-que[1])==4 || abs(que[5]-que[0])==5)
{
continue;
}
for(que[6] = 0;que[6] <= 7;++ que[6])
{
if(que[5]==que[6] ||que[4]==que[6]||que[3]==que[6]||que[2]==que[6]||que[1]==que[6]||que[0]==que[6]|| abs(que[6]-que[5])==1 || abs(que[6]-que[4])==2 || abs(que[3]-que[6]) == 3 || abs(que[6]-que[2]) == 4 || abs(que[6]-que[1])==5 || abs(que[6]-que[0])==6)
{
continue;
}
for(que[7] = 0;que[7] <= 7;++ que[7])
{
if(que[7]==que[6] ||que[7]==que[5]||que[7]==que[4]||que[7]==que[3]||que[7]==que[2]||que[7]==que[1]||que[7]==que[0]|| abs(que[7]-que[6])==1 || abs(que[7]-que[5])==2 || abs(que[7]-que[4])==3 || abs(que[3]-que[7]) == 4 || abs(que[7]-que[2]) == 5 || abs(que[7]-que[1])==6 || abs(que[7]-que[0])==7)
{
continue;
}
printf("皇后1:%d 皇后2:%d 皇后3:%d 皇后4:%d 皇后5:%d 皇后6:%d 皇后7:%d 皇后8:%d\n",que[0],que[1],que[2],que[3],que[4],que[5],que[6],que[7]);
tmp ++;
}
}
}
}
}
}
}
}
printf("%d种\n",tmp);
return 0;
}
代码也没难度,就照着规则,皇后不能同列(因为已经将皇后放在固定行所以此要求自动满足),皇后不能对角线,就🆗了,就这样。