java - Iterative Depth First Search To Find A String (2D Array) -
i'm trying create iterative approach boggle game. class contains fields 2d array of strings called "board" , has 2d array of booleans called "havevisit". method calls test 2 loops through whole board, finding positions of first character of target string, passes coordinates test2 method, returning list holding coordinates.
the return1index method takes 2d array coordinate @ creates int representative of coordinates corresponding 1d array it. return2dindex opposite , returns int array holding 2 coordinates.
public list<integer> test2(int row1, int row2, string findme){ string temp = findme; list<integer> output = new arraylist<integer>(); if (board[row1][row2].charat(0) != findme.charat(0)) return output; havevisit = new boolean[size][size]; int row = row1; int column = row2; output.add(return1dindex(row, column)); havevisit[row][column] = true; //for each letter in string for(int j = 0; j < temp.length(); j++) //for every column , row combination (int x = row - 1; x < row + 2 ; x++) (int y = column - 1; y < column + 2 ; y++) //if index valid , not visited if (x > -1 && y > -1 && y < size && x < size && !havevisit[x][y]) //if output same size string, return if(output.size() == findme.length()) return output; //if character in board matches char we're looking if(board[x][y].charat(0) == temp.charat(j)) { havevisit[x][y] = true; output.add(return1dindex(x, y)); //update row , column indices row = x; column = y; } } } return output; }
for reason method works 50% of time. method works fine finding letters when they're arranged left right or top bottom, finding words right left or bottom top never works except 1 case: when you're searching string of length 1 or 2, method works.
i have working recursive solution wanted try way. thoughts why wouldn't work?
edit: code works right left, still not work when attempting search upwards.
i don't know problem is, there few suspects:
you updating row , column indices while checking neighbors. removing element array while iterating through it: it's defined, has tricky semantics. suggest either bailing out (greedy algorithm) or keeping stack of matches (deeper search, requires saving stack of visited cells too).
the
for
s missing opening braces, closing braces there, suggesting missing code.i'm not familiar boggle, isn't possible letter have 2 similar neighbors,
axa
? doingoutput.add(return1dindex(x, y));
may outputting 2 ways same letter. may endoutput
longerfindme
.
my suggestion follow more standard format of depth-first search while iron out bugs. wikipedia has non-recursive pseudocode implementation, example: https://en.wikipedia.org/wiki/depth-first_search#pseudocode .
Comments
Post a Comment