0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 55

Задача о 8 ферзях: сколько было сделано возвратов назад

06.05.2017, 17:51. Показов 2341. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите переделать код под условие задачи.

Условие задачи: В программе о восьми ферзях (рекурсивной) подсчитайте, сколько было сделано возвратов назад.
Я так понял, что нужно подсчитать сколько раз не удалось поставить ферзя)

Буду очень признателен, за помощь.
Заранее спасибо.

Данный код подсчитывает все возможные варианты.

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
79
80
#include <iostream>
using namespace std;
const int N= 8; // Размер.
int board[N][N];
int results_count = 0; // Количество решений.
    
int main()
{
    setQueen(0);
    return 0;
}
 
void showBoard()   // Функция showBoard() - отображает доску.
{
    for (int a = 0; a < N; ++a)
    {
        for (int b = 0; b <N; ++b)
        {
            cout << ((board[a][b]) ? "Q " : ". ");
        }
        cout << '\n';
    }
}
 
// Функция tryQueen() - проверяет нет ли уже установленных ферзей,
// по вертикали, диагоналям.
bool tryQueen(int a, int b)
{
    for (int i = 0; i < a; ++i)
    {
        if (board[i][b])
        {
            return false;
        }
    }
 
    for (int i = 1; i <= a && b - i >= 0; ++i)
    {
        if (board[a - i][b - i])
        {
            return false;
        }
    }
 
    for (int i = 1; i <= a && b + i < N; i++)
    {
        if (board[a - i][b + i])
        {
            return false;
        }
    }
 
    return true;
}
 
// Функция setQueen() - пробует найти результаты решений.
void setQueen(int a) // a - номер очередной строки в которую нужно поставить очередного ферзя.
{
    setlocale(LC_ALL, "RUS");
    if (a == N)
    {
        //showBoard();
        cout << "Результат" << ++results_count << "\n\n";
        return; // Опционально.
    }
 
    for (int i = 0; i < N; ++i)
    {
        // Здесь проверяем, что если поставим в board[a][i] ферзя (единицу),
        // то он будет единственным в этой строке, столбце и диагоналях.
        if (tryQueen(a, i))
        {
            board[a][i] = 1;
            setQueen(a + 1);
            board[a][i] = 0;
        }
    }
 
    return; // Опционально.
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2017, 17:51
Ответы с готовыми решениями:

В рекурсивной программе о восьми ферзях подсчитать, сколько было сделано возвратов назад
Помогите, пожалуйста, написать код к задаче Условие задачи: В программе о восьми ферзях (рекурсивной) подсчитайте, сколько было...

Как выйти с цикла for, если условие было сделано ранее чем закончился оператор for
#include &lt;iostream&gt; using namespace std; void checkUser(char *userlogin, char *userpassword); void enterFild(char *userlogin,...

Задача о 8 ферзях
вывести в файл все 92 возможных варианта(в виде матрицы, где расположение ферзя означает единицу, а пустые клетки 0) расстановки 8 ферзей...

20
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
11.05.2017, 00:59
Студворк — интернет-сервис помощи студентам
Так у меня и считается количество возвратов, произошедших до первой удачной расстановки ферзей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2017, 00:59

Задача о 8 ферзях
Помогите, пожалуйста, подсчитать сколько будет сделано возвратов return 0; в фукнцию char check(int*A, int n) Как поставить...

Задача о 8 ферзях
Условие задачи: Решить задачу о восьми ферзях и вывести в текстовый файл несколько вариантов решения. Смог сделать только, чтобы...

Задача о 8 ферзях
Условие ЗАДАЧи : В программе о восьми ферзях (рекурсивной) подсчитайте, сколько было сделано возвратов назад. Помогите, пожалуйста, в...

Задача о ферзях
Пожалуйста, помогите решить задачу. Дана шахматная доска размерностью N на N ( 1&lt;= N &lt;=10). Необходимо вывести количество...

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


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

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

Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru