Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ilina96
0 / 0 / 0
Регистрация: 30.11.2015
Сообщений: 2
1

Расставить восемь ферзей на шахматной доске так, что бы они не "били" друг друга

30.11.2015, 21:26. Просмотров 223. Ответов 0
Метки нет (Все метки)

Всем прекрасно известна эта задача. Необходимо расставить восемь ферзей на шахматной доске так, что бы они не "били" друг друга. На просторах этого форума нашла код, но не особо в нем могу разобраться. Подскажите, какие функции выполняет каждая из подпрограмм?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
using namespace std;
 
int board[8][8];
 
void resetQ(int i, int j)
    {
    for(int x=0; x<8; ++x)
        {
        --board [x][j];
        --board [i][x];
        int k;
        k = j-i+x;
        if (k >= 0 && k<8)
            --board[x][k];
        k = j+i-x;
        if (k >= 0 && k<8)
            --board[x][k];
        }
    board[i][j] = 0;
    }
 
void setQ(int i, int j)
    {
    for(int x=0; x<8; ++x)
        {
        ++board [x][j];
        ++board [i][x];
        int k;
        k = j-i+x;
        if (k >= 0 && k<8)
            ++board[x][k];
        k = j+i-x;
        if (k >= 0 && k<8)
            ++board[x][k];
        }
    board[i][j] = -1;
    }
 
bool tryQ(int i)
    {
    bool result = false;
    for (int j = 0; j<8; ++j)
    {
        if (board[i][j] == 0)
        {
            setQ(i,j);
            if(i==7)
                result = true;
            else
            {
                if(!(result = tryQ(i+1)))
                    resetQ(i,j);
            }
        }
    if(result)
        break;
    }
    return result;
    }
int main()
    {
    for(int i=0; i<8; ++i)
    for(int j=0; j<8; ++j)
        board[i][j] = 0;
        tryQ(0);
    for(int i=0; i<8; ++i)
        {
        for(int j=0; j<8; ++j)
            {
            if (board[i][j] == -1)
                cout <<"[]";
            else 
                cout <<". ";
            }
        cout << endl;
        }
    }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2015, 21:26
Ответы с готовыми решениями:

Расставить на доске N ферзей так, чтобы они не били друг друга
смысл в том чтобы расставить на шахматной доске размером N*N, N ферзей так, чтобы они не били друг...

Рекурсия: расставить на доске 12 коней так, чтобы они не били друг друга, но при этом пробивали все остальные поля
На шахматной доске расставить 12 коней так, чтобы они не били друг друга, но при этом пробивали все...

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

Перечислить все расстановки N ферзей на шахматной доске NxX, при которых они не бьют друг друга
Задача: Перечислить все расстановки N ферзей на шахматной доске NxX, при которых они не бьют друг...

Какое минимальное количество слонов можно расставить на шахматной доске так, чтобы они били все поле
Cлоники ограничение по времени на тест: 2 секунды ограничение по памяти на тест: 64 мегабайта...

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2015, 21:26

Сформировать все возможные варианты расстановки ферзей на поле, где они бы не били друг друга
Помогите написать программу, которая сформирует все возможные варианты расстановки m (m&gt;3) ферзей...

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

Рекурсивный алоритм шахматная доска расставить фигуры так чтобы не били друг друга
На шахматной доске n x n,расставить фигуры так,чтобы они не били друг друга,нужно реализовать 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru