Расстановка 8 ферзей на шахматной доске

автор evteev, Дек.30, 2009, рубрики C/C++/C#

Пробовали ли вы когда-нибудь расставить 8 ферзей на шахматной доске так, чтобы ни один из них не находился под ударом? Зная, что ферзь бьет по вертикали, горизонтали и диагонали, довольно непросто подобрать такую позицию. Но не для С. Небольшая программа за считанные минуты выдаст вам около 90 таких позиций, например, вот такую:


int col[8], up_free[15], dn_free[15], coln[8] ;

main( )
{
int i ;

for ( i = 0 ; i <= 7 ; i++ )
col[i] = 1 ;
for ( i = 0 ; i <= 14 ; i++ )
up_free[i] = dn_free[i] = 1 ;
clrscr( ) ;
addqueen( ) ;
}

addqueen( )
{
int i, c, r ;
static int comb, row = -1 ;

row++ ;

/* Проверяем колонки */
for ( i = 0 ; i <= 7 ; i++ ) { /* если клетка не находится под ударом */ if ( col[i] && up_free[i+row] && dn_free[row-i+7]) { /* запоминаем, что в строке находится ферзь */ coln[row] = i ; /* маркируем колонку и диагональ */ col[i] = 0 ; up_free[i+row] = 0 ; dn_free[row-i+7] = 0 ; /* если заполнены все строки */ if ( row >= 7 )
{
comb++ ;
printf ( «\n\n\ncombination no. %d», comb ) ;
for ( r = 0 ; r <= 7 ; r++ )
{
printf ( «\n» ) ;
for ( c = 0 ; c <= 7 ; c++ )
{
if ( c == coln[r] )
printf ( » Q » ) ;
else
printf ( » . » ) ;
}
}
}
else
addqueen( ) ;

/* снимаем пометку с колонки и диагонали */
col[ coln[row] ] = 1 ;
up_free[ row + coln[row] ] = 1 ;
dn_free[ row - coln[ row ] + 7 ] = 1 ;
}
}
row– ; /* уменьшаем счетчик строк, пробуем следующую комбинацию */
}

Мой блог о программировании находят по следующим фразам

Комментировать :

Комментирование закрыто.



Что-то ищите?

Используйте форму для поиска по сайту:



Все еще не можете что-то найти? Оставьте комментарий или свяжитесь с нами, тогда мы позаботимся об этом!

Все о программировании - языки программирования скачать

Все о программировании

  • языки программирования
  • php программирование
  • программирование C++
  • программирование на java
  • язык программирования java
  • программирование на delphi
  • программирование на pascal
  • купить программы программирования
  • язык программирования assembler
  • языки программирования скачать
  • скачать языки программирования

Архив сообщений

Все вхождения, в хронологическом порядке...