Задача о восьми ферзях на СИ

Недавно надо было решить задачу о восьми ферзях на шахматной доске (стандартная задача физ-мата). Может кому пригодится, выложу.

В задаче реализованы 3 функции, проверки ячейки, вывода поля и собственно главная функция. Всё написано на чистом СИ. Задача выводит 92 варианта расстановки ферзей. Если что непонятно, спрашивайте =).

#include <stdio.h>
#include
<stdlib.h>

#define MAXPOLE 8

int pole[MAXPOLE];
int
count=0;

bool check(int beg)
{
bool res=true;
if (beg>=1)
{
int i=0;
while (res && (i<beg))
{
if (pole[i] == pole[beg]) res=false;
if (abs(pole[beg]-pole[i]) == abs(beg-i)) res=false;
i++;
}
}
return res;
}

void print(int beg)

{
printf(“———– %02d ————\n”,count);
printf( A B C D E F G H \n”);
for(int y=0; y<beg; y++)
{
printf(“%d ,y+1);
for(int x=0; x<MAXPOLE; x++)
{
if (x== pole[y]) printf(” F “);
else printf(” * “);
}
printf(“\n”);
}
printf(“—————————\n”);
}

int main()
{
int beg=0;
pole[beg]=-1;
while (beg>=0)
{
pole[beg]++;
if (pole[beg] == MAXPOLE) beg–;
else
{
if (check(beg))
{
beg++;
if (beg==MAXPOLE)
{
count++;
print(MAXPOLE);
beg–;
}
else pole[beg]=-1;
}
}

}
return 0;
}

 

#include <stdio.h>

#include <stdlib.h>

#define MAXPOLE 8

int pole[MAXPOLE];

int count=0;

bool check(int beg)

{

bool res=true;

if (beg>=1)

{

int i=0;

while (res && (i<beg))

{

if (pole[i] == pole[beg]) res=false;

if (abs(pole[beg]-pole[i]) == abs(beg-i)) res=false;

i++;

}

}

return res;

}

void print(int beg)

{

printf(“———– %02d ————\n”,count);

printf( A B C D E F G H \n”);

for(int y=0; y<beg; y++)

{

printf(“%d ,y+1);

for(int x=0; x<MAXPOLE; x++)

{

if (x== pole[y]) printf(” F “);

else printf(” * “);

}

printf(“\n”);

}

printf(“—————————\n”);

}

int main()

{

int beg=0;

pole[beg]=-1;

while (beg>=0)

{

pole[beg]++;

if (pole[beg] == MAXPOLE) beg–;

else

{

if (check(beg))

{

beg++;

if (beg==MAXPOLE)

{

count++;

print(MAXPOLE);

beg–;

}

else pole[beg]=-1;

}

}

}

return 0;

}

Ноя16

Ваш отзыв