Как расставить 8 ферзей чтобы они не пересекались?

13 ответов на вопрос “Как расставить 8 ферзей чтобы они не пересекались?”

  1. SugarOk Ответить

    “8 ферзей” – это интересная игра для любителей головоломок. Идея для игры была подсказана известной логической задачей о расстановке фигур на шахматной доске. По условию задачи требуется расставить на самой обычной 64-клеточной шахматной доске 8 ферзей. Фигуры должны находится таким образом, чтобы ни одна из них не находилась под атакой другой фигуры. Каждый игрок знает, что ферзь или королева – самая сильная шахматная фигура. И не так-то просто разойтись на доске даже двумя ферзями, а в игре предстоит разместить целых восемь фигур! Игроку дана трехмерная доска, на которой с помощью мышки, он может устанавливать фигуры. Нажатием левой кнопки мыши можно установить королеву на любую клеточку поля. Теперь нужно внимательно следить, чтобы после второй установки следующей фигуры, ее линии атаки по горизонтали, вертикали и диагонали не пересекались с предыдущей фигурой. Все очень просто, но и одновременно достаточно сложно, ведь чем больше ферзей появляется на шахматном поле сражений, тем меньше свободного места остается. Если фигура попадет под влияние другого ферзя, то она будет считаться “убитой”. Потренируйте логическое мышление в этой увлекательной и бесплатной головоломке.

  2. Negami Ответить

    Пробовали ли вы когда-нибудь расставить 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-- ; /* уменьшаем счетчик строк, пробуем следующую комбинацию */ }

  3. VideoAnswer Ответить

  4. VideoAnswer Ответить

  5. VideoAnswer Ответить

Добавить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *