Подключите четыре битбордаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Подключите четыре битборда

Сообщение Anonymous »

В этом посте было очень интересное предложение по тестированию соединения четырех побед с использованием битборда.

Доска имеет такую ​​структуру:

Код: Выделить всё

6 14 22 30 38 46 54
5 13 21 29 37 45 53
4 12 20 28 36 44 52
3 11 19 27 35 43 51
2 10 18 26 34 42 50
1  9 17 25 33 41 49
0  8 16 24 32 40 48
Они также рекомендовали следующий алгоритм для проверки выигрыша с использованием всего 8 смен:

Код: Выделить всё

bool haswon(int64_t board)
{
int64_t y = board & (board >> 7);
if (y & (y >> 2 * 7)) // check \ diagonal
return true;
y = board & (board >> 8);
if (y & (y >> 2 * 8)) // check horizontal -
return true;
y = board & (board >> 9);
if (y & (y >> 2 * 9)) // check / diagonal
return true;
y = board & (board >> 1);
if (y & (y >> 2))     // check vertical |
return true;
return false;
}
Я хочу реализовать этот алгоритм в аналогичной программе, которую пишу. Однако, чтобы применить мою эвристическую функцию, мне нужно знать, сколько частей находится в данной строке. Я действительно пытался разобраться в этом алгоритме, но не могу понять, как проверить, есть ли в ряду только 1, 2 или 3 части.

Сейчас я просто перебираю каждую строку и подсчитываю биты, но уверен, что должен быть лучший способ использования сдвигов.>

Подробнее здесь: https://stackoverflow.com/questions/133 ... r-bitboard
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»