Ho fatto qualcosa di simile tempo fa. Dovresti approfittare del fatto che le parole sono un insieme ordinato di personaggi. Quindi, esegui una ricerca lineare sulla matrice per la prima lettera, quindi chiamerai in modo ricorsivo la ricerca direzionale.
Per semplificare la complessità computazionale, puoi aggiungere alcuni vincoli, ad esempio if word.length > number of characters on that direction don't start searching
.
La firma della funzione ricorsiva sarebbe come:
boolean search(string word, int direction)
con caso terminale
if (word.length==1) return isNextLetterInDirection(word, direction);
e la ricerca è
search(substring(word, 0, word.length-1), direction);
Questo algoritmo copre anche casi e parole palindromo incluse le loro sillabe.