2015-06-07 2 views
0

Я пытаюсь понять алгоритм игры под названием «Boggle» , который находит слова в матрице N * N.Значение «направления X-Y треугольных пар для смежных ячеек»

#include <cstdio> 
#include <iostream> 

using namespace std; 

const int N = 6; // max length of a word in the board 

char in[N * N + 1]; // max length of a word 
char board[N+1][N+2]; // keep room for a newline and null char at the end 
char prev[N * N + 1]; 
bool dp[N * N + 1][N][N]; 

// direction X-Y delta pairs for adjacent cells 
int dx[] = {0, 1, 1, 1, 0, -1, -1, -1}; 
int dy[] = {1, 1, 0, -1, -1, -1, 0, 1}; 
bool visited[N][N]; 

bool checkBoard(char* word, int curIndex, int r, int c, int wordLen) 
{ 
if (curIndex == wordLen - 1) 
{ 
    //cout << "Returned TRUE!!" << endl; 
    return true; 
} 

int ret = false; 

for (int i = 0; i < 8; ++i) 
{ 
    int newR = r + dx[i]; 
    int newC = c + dy[i]; 

    if (newR >= 0 && newR < N && newC >= 0 && newC < N && !visited[newR]  [newC] && word[curIndex+1] == board[newR][newC]) 

Я не понимаю эту часть:

// direction X-Y delta pairs for adjacent cells 
int dx[] = {0, 1, 1, 1, 0, -1, -1, -1}; 
int dy[] = {1, 1, 0, -1, -1, -1, 0, 1}; 

Почему эти массива имеют значения, которые они имеют, и почему это работает?

ответ

1

Эти массивы представляют возможные комбинации строк и столбцов смещения от текущего «курсора» адресом (который является х, у координаты отслеживаются в коде в качестве переменных c, r):

// direction X-Y delta pairs for adjacent cells 
int dx[] = {0, 1, 1, 1, 0, -1, -1, -1}; 
int dy[] = {1, 1, 0, -1, -1, -1, 0, 1}; 

Например , если вы представляете квадратную сетку 3x3 и считаете, что центральный ящик является текущим местоположением, то остальные 8 окружающих ячеек - это те, которые указаны этими наборами смещений строк и столбцов. Если бы мы приняли смещения в индексе 2 (dx[2] = 1 и dy[2] = 0), это означало бы, что ячейка одна строка вниз (и нулевое смещение влево/вправо).

Смежные вопросы