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

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

Восстановить пароль Регистрация
 
minigans
Сообщений: n/a
21.12.2010, 00:26     восемь ферзей #1
доброго времени суток
есть классическая задача о восьми ферзях:
Расставить на стандартной 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++
C++ задача про N ферзей
Разделение pi на восемь частей C++

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

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

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