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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
minigans
Сообщений: n/a
#1

восемь ферзей - C++

21.12.2010, 00:26. Просмотров 629. Ответов 0
Метки нет (Все метки)

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

есть код (взятый отсюда http://www.youtube.com/watch?v=bF5d0tiGiJA)
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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int board[8][8];
 
void setQueen(int i, int j)
{
     for (int x=0; x <8; ++x)
     {
         ++board[x][j];
         ++board[i][x];
         int foo;
         foo = j - i + x;
         if (foo >= 0 && foo <8)
            ++board[x][foo];
         foo = j +i -x;
         if (foo >= 0 && foo <8)
            ++board[x][foo];
     }
     board[i][j] = -1;
}
 
void resetQueen(int i, int j)
{
     for (int x=0; x <8; ++x)
     {
         --board[x][j];
         --board[i][x];
         int foo;
         foo = j - i + x;
         if (foo >= 0 && foo <8)
            --board[x][foo];
         foo = j +i -x;
         if (foo >= 0 && foo <8)
            --board[x][foo];
     }
     board[i][j] = 0;
}
bool tryQueen (int i)
{
     bool result = false;
     for (int j = 0; j <8; ++j)
         {
             if (board[i][j] == 0)
                {
                setQueen(i,j);
                if (i == 7)
                  result = true;
                else
                  {
                       if(!(result = tryQueen(i+1)))
                         resetQueen(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;
     tryQueen(0);
     for (int i = 0; i < 8; ++i)
     {    
         for (int j = 0; j < 8; ++j)
         {
             if (board[i][j] == -1)
                cout << "Q";
             else
                cout << ""; 
         }
     cout << endl; 
     }
     system("PAUSE");
     return EXIT_SUCCESS;       
}
как его изменить так, чтоб находились все 92 решения?

интернет искал, находил несколько вариантов исходного кода, но не смог разобраться как именно происходит поиск всех решений

данный вариант кода интересен тем что он довольно прост для понимания новичка

буду благодарен за любую помощь

p.s. Bloodshed Dev-C++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2010, 00:26     восемь ферзей
Посмотрите здесь:

Расставить 8 Ферзей на шахмотной доске... в борланд С C++
8 ферзей C++
Расстановка 8 ферзей C++
восемь ферзей на билдере C++
Перебор. Задача про ферзей. C++
задача n-ферзей C++
Расставить 8 ферзей на шахматной доске 8 на 8, которые не бьют друг друга C++
Разделение pi на восемь частей C++
C++ Варианты размещения восьми ферзей на шахматной доске
C++ Обработать вектор, отобразив элементы по восемь слов на строку, перевести символы элементов в верхний регистр
Реализовать алгоритм всех возможных комбинаций восьми ферзей C++
C++ Что значит отобразить преобразованные элементы по восемь слов на строку? Vector

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 08:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru