Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2010, 20:34   #1
marry
Новичок
Джуниор
 
Регистрация: 19.11.2010
Сообщений: 1
По умолчанию расставить 8 ладей на шахматной доске

Задача на тему рекурсия, 9 класс
что делать примерно понятно, но все же,
помогите пожалуйста решить.

Напиcать программу, которая расставляет на шахматной доске 8 ладей таким образом, чтобы ни одна из них не угрожала другой.
По шахматным правилам ладья бьет все фигуры, расположенные на той же горизонтали и вертикали, поэтому каждая вертикаль и горизонталь должны содержать одну и только одну ладью.

заранее огромное спасибо)
marry вне форума Ответить с цитированием
Старый 19.11.2010, 21:17   #2
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Код:
for (i=8;i;--i)
x[i]=y[i]=i;
Вот и все решение)
LeBron вне форума Ответить с цитированием
Старый 19.11.2010, 22:08   #3
sergey.d
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 98
По умолчанию

Да, для ладей неинтересно. Держи для ферзей! А уж для ладей достаточно несколько строк убрать.

Код:
#include <stdlib.h>
#include <iostream>

const int BS = 8;
enum CellState { Free = 0, Queen, UnderAttack };

struct ChessBoard
{

    ChessBoard()
    {
        for(int r = 0; r < BS; ++r)
            for(int c = 0; c < BS; ++c)
                cells[r][c] = Free;
    }

    void placeQueen(int r0, int c0)
    {
        int r, c;
        cells[r0][c0] = Queen;
        for(c = c0 - 1; c >= 0; --c) cells[r0][c] = UnderAttack;
        for(c = c0 + 1; c < BS; ++c) cells[r0][c] = UnderAttack;
        for(r = r0 - 1; r >= 0; --r) cells[r][c0] = UnderAttack;
        for(r = r0 + 1; r < BS; ++r) cells[r][c0] = UnderAttack;
        for(r = r0 - 1, c = c0 - 1; r >= 0 && c >= 0; --r, --c) cells[r][c] = UnderAttack;
        for(r = r0 + 1, c = c0 + 1; r < BS && c < BS; ++r, ++c) cells[r][c] = UnderAttack;
        for(r = r0 - 1, c = c0 + 1; r >= 0 && c < BS; --r, ++c) cells[r][c] = UnderAttack;
        for(r = r0 + 1, c = c0 - 1; r < BS && c >= 0; ++r, --c) cells[r][c] = UnderAttack;
    }

    CellState cells[BS][BS];
};

void placeQueens(int count, ChessBoard &board)
{
    if(count)
    {
        for(int r = 0; r < BS; ++r)
            for(int c = 0; c < BS; ++c)
                if(!board.cells[r][c])
                {
                   ChessBoard b = board;
                   b.placeQueen(r, c);
                   placeQueens(count - 1, b);
                }
    }
    else
    {
        std::cout << "------------------------------------------" << std::endl;
        std::cout << "Position: " << std::endl;
        std::cout << "------------------------------------------" << std::endl;
        for(int r = 0; r < BS; ++r)
        {
            for(int c = 0; c < BS; ++c) std::cout << ((board.cells[r][c] == Queen) ? "Q " : ". ");
            std::cout << std::endl;
        }
        std::cout << "------------------------------------------" << std::endl;
        exit(0); // Remove this line if you want to get out all possible results
    }
}

int main(int, char *[])
{
    ChessBoard board;
    placeQueens(BS, board);
    return 0;
}
sergey.d вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си/Си++ Слоны на шахматной доске Маришка_Курносова Помощь студентам 1 12.09.2010 01:02
Найти расстановку восьми слонов на шахматной доске WhiteKuz Общие вопросы Delphi 1 30.04.2010 12:25
монетки на шахматной доске! grimm_jow Общие вопросы C/C++ 2 31.01.2010 10:27
Поиск пути на шахматной доске ходом ферзя A!eI{S@nDrA Помощь студентам 2 16.06.2009 09:51