Консультация № 172625
25.09.2009, 16:43
0.00 руб.
0 2 1
Здравствуйте Уважаемые Эксперты!
Помогите пожалуйста: есть пример задачи о 8 ферзях.Необходимо переделать задачу так, что ферзь может еще ходить и как конь.
Заранее благодарю!

Приложение:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>

int x[9], a[9], b[16], c[16] ;
void sv(int i)
{
int j, n, m;
for (j=1; j<=8; j++)
{
if (a[j]&&b[i+j-1]&&c[j-i+8])
{
x[i]=j;
a[j]=b[i+j-1]=c[j-i+8]=0 ;
if (i<8)
sv(i+1);
else
{
for (m=1; m<=8; m++)
{
putchar('\n');
for (n=1; n<=8; n++)
{
if (x[n]==m) printf(" S");
else printf(" *");
}
};
getch();
putchar('\n');
}
a[j]=b[i+j-1]=c[j-i+8]=1;
}
}
}

main()
{
int i;
for (i=1; i<=8; i++) a[i]=1;
for (i=1; i<=15; i++) b[i]=c[i]=1;
sv(1);
}

Обсуждение

Неизвестный
26.09.2009, 14:38
общий
это ответ
Здравствуйте, Мих@ил.
Код переделал, но результата нет. Получается что если ферзь может ходить еще и как конь, то расставить 8 ферзей на шахматной доске не возможно.

Приложение:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>

int x[9], a[9], b[16], c[16], d[9][9];
void sv(int i)
{
int j, n, m;
for (j=1; j<=8; j++)
{
if (a[j]&&b[i+j-1]&&c[j-i+8]&&(i>1&&j<7? d[i-1][j+2]:1)&&(i>1&&j>2? d[i-1][j-2]:1)&&(i>2&&j<8? d[i-2][j+1]:1)&&(i>2&&j>1? d[i-2][j-1]:1)&&(i<7&&j>1? d[i+2][j-1]:1)&&(i<7&&j<8? d[i+2][j+1]:1)&&(i<8&&j<7? d[i+1][j+2]:1)&&(i<8&&j>2? d[i+1][j-2]:1))
{
if(i>1 && j<7)
d[i-1][j+2]=0;
if(i>1 && j>2)
d[i-1][j-2]=0;
if(i>2 && j<8)
d[i-2][j+1]=0;
if(i>2 && j>1)
d[i-2][j-1]=0;
if(i<7 && j>1)
d[i+2][j-1]=0;
if(i<7 && j<8)
d[i+2][j+1]=0;
if(i<8 && j<7)
d[i+1][j+2]=0;
if(i<8 && j>2)
d[i+1][j-2]=0;
x[i]=j;
a[j]=b[i+j-1]=c[j-i+8]=0 ;
if (i<8)
sv(i+1);
else
{
for (m=1; m<=8; m++)
{
putchar('\n');
for (n=1; n<=8; n++)
{
if (x[n]==m) printf(" S");
else printf(" *");
}
};
getch();
putchar('\n');
}
a[j]=b[i+j-1]=c[j-i+8]=1;
if(i>1 && j<7)
d[i-1][j+2]=1;
if(i>1 && j>2)
d[i-1][j-2]=1;
if(i>2 && j<8)
d[i-2][j+1]=1;
if(i>2 && j>1)
d[i-2][j-1]=1;
if(i<7 && j>1)
d[i+2][j-1]=1;
if(i<7 && j<8)
d[i+2][j+1]=1;
if(i<8 && j<7)
d[i+1][j+2]=1;
if(i<8 && j>2)
d[i+1][j-2]=1;
}
}
}

int main()
{
int i;
for (i=1; i<=8; i++) a[i]=1;
for (i=1; i<=15; i++) b[i]=c[i]=1;
for (i=1; i<=8; i++)
for(int j=1; j<=8; j++)
d[i][j]=1;
sv(1);
return 0;
}
5
Неизвестный
26.09.2009, 19:40
общий
Koзлов Валерий Викторович:
В задаче конкретно не указано что их должно быть 8. Просто пример дали на расстановку 8 ферзей =).
А необходимо вывести все расстановки ферзей (которые ходят еще и как конь), и чтоб они друг другу не угрожали.
Извените за неполную формулировку задания.
Форма ответа