Форум программистов, компьютерный форум CyberForum.ru

Расставить 8 ферзей на шахматной доске 8 на 8, которые не бьют друг друга - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ ifstream читает файл со второй строки http://www.cyberforum.ru/cpp-beginners/thread724479.html
Добрый день, читаю файл через fstream и записываю его, запись идет только со второй строки, не могу понять почему #include <iostream> #include <cctype> #include <fstream> #include <string> #define COLS 80 using namespace std; int replace(char*, char*);
C++ Одномерные динамические массивы (осуществить ввод, проверку, вывод результатов) Очень прошу помочь с написанием этой программы.Говорят что легкая но у меня никак не выходит.Частями вроде бы получается, однако все детали, предложенные здесь, сделать не могу :( Одномерные массивы Память под массивы выделяется динамически. Необходимо: - осуществить проверку на правильность ввода размерности массивов. Массивы должны состоять не менее, чем из одного элемента; - ... http://www.cyberforum.ru/cpp-beginners/thread724473.html
C++ Ошибка инициализации объекта, конструктором класса
Добрый день. Написал программу. Создание класса (упражнение из книги Дейтеля) "Создайте класс с именем Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. Ваш класс должен иметь один элемент данных типа int для представления банковского баланса. Класс должен предусматривать конструктор, принимающий начальный баланс, используемый для инициализации...
C++ Структуры (напечатать самое распространенное женское имя)
Приветствую! Всем хорошего настроения! Только вот у меня его совсем нет..... Сессия на носу, необходимо последнюю лабораторку допинать, а не получается:( Если кто нибудь поможет, буду очень благодарен. Задание выглядит так: На основе таблицы, содержащей следующую информацию о каждом из 20 студентов некоторого ВУЗА:фамилия,имя,отчество,пол,возраст,курс причем в фамилии, имени и отчестве-не...
C++ Прерывания http://www.cyberforum.ru/cpp-beginners/thread724426.html
Друзья, вот архив с DOC-ким файлом, помогите реализовать программу,задание под пунктом ПРИМЕР ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ
C++ Удаление рядков и столбцов в матрице Есть матрица, нужно удалить те рядки и столбцы в которих есть нулевой елемент. Например из матрицы 3 2 -3 0 4 4 0 2 -1 1 2 3 -1 -3 2 получаем 3 -3 4 подробнее

Показать сообщение отдельно
marat_miaki
97 / 86 / 31
Регистрация: 08.04.2013
Сообщений: 296
08.04.2015, 17:27     Расставить 8 ферзей на шахматной доске 8 на 8, которые не бьют друг друга
самый лучший на вики
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
81
82
83
84
85
// Backtracking method. "Поиск с возвратом" на примере
// задачи о восьми ферзях.
 
#include <iostream>
 
const int SIZE = 8; // Размер.
 
int board[SIZE][SIZE];
int results_count = 0; // Количество решений.
 
// Функция showBoard() - отображает доску.
void showBoard()
{
    for(int a = 0; a < SIZE; ++a)
    {
        for(int b = 0; b < SIZE; ++b)
        {
            std::cout << ((board[a][b]) ? "Q " : ". ");
        }
        std::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 < SIZE; i++)
    {
        if(board[a-i][b+i])
        {
            return false;
        }
    }
 
    return true;
}
 
// Функция setQueen() - пробует найти результаты решений.
void setQueen(int a) // a - номер очередной строки в которую нужно поставить очередного ферзя.
{
    if(a == SIZE)
    {
        showBoard();
        std::cout << "Result #" << ++results_count << "\n\n";
        return; // Опционально.
    }
 
    for(int i = 0; i < SIZE; ++i)
    {
        // Здесь проверяем, что если поставим в board[a][i] ферзя (единицу),
        // то он будет единственным в этой строке, столбце и диагоналях.
        if(tryQueen(a, i))
        {
            board[a][i] = 1;
            setQueen(a+1);
            board[a][i] = 0;
        }
    }
 
    return; // Опционально.
}
 
int main()
{
    setQueen(0);
 
    return 0;
}
 
Текущее время: 17:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru