Хитрость в том, что вам не нужно рассматривать все 8 возможных направлений отдельно. Вы можете представить каждого с вектором. Например, направление «вперед» будет (0, 1)
(номер строки, затем столбец) - вектор, указывающий вправо. Диагональное верхнее левое направление будет (-1, -1)
. Ну, вы поняли.
Тогда просто создайте функцию
boolean findWord(int row, int col, int d_row, int d_col, char[] word);
Может принимать текущую позицию матрицы ((row, col)
, где должно начинаться слово), направление поиска ((d_row, d_col)
) и слово для поиска. Возвращает ли данное слово здесь.
Затем вы можете вызвать его для разных направлений, например,
findWord(row, col, -1, 0, word);
findWord(row, col, -1, 1, word);
findWord(row, col, 0, 1, word);
...
(я перечисляю их по часовой стрелке)
Реализация findWord
просто увеличивает текущую позицию на d_row
и d_col
, пока мы не найдем несоответствие в символах или концах слов. Основная процедура такова
while (row < total_rows && row >= 0 && col < total_columns && col >= 0) {
// check character here
...
row += d_row;
col += d_col;
}
Могу поспорить, у вас будет весь код обработки (кроме ввода-чтения) в 40 строках.