"direction X-Y delta pairs for adjacent cells" 的含义
Meaning of "direction X-Y delta pairs for adjacent cells"
我正在尝试理解名为 "Boggle" 的游戏算法
它在 N*N 矩阵中找到单词。
#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};
为什么这些数组具有它们所具有的值,为什么这样做有效?
这些数组表示从当前 "cursor" 位置开始的行和列偏移的可能组合(这是代码中作为变量跟踪的 x,y 坐标 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
)处获取偏移量,这将指示单元格向下一行(并且零偏移 left/right)。
我正在尝试理解名为 "Boggle" 的游戏算法 它在 N*N 矩阵中找到单词。
#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};
为什么这些数组具有它们所具有的值,为什么这样做有效?
这些数组表示从当前 "cursor" 位置开始的行和列偏移的可能组合(这是代码中作为变量跟踪的 x,y 坐标 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
)处获取偏移量,这将指示单元格向下一行(并且零偏移 left/right)。