1) В настоящее время ваша функция solve()
ищет слово по прямой линии , начиная с каждой точки: это то, что вы намереваетесь?Я спрашиваю только потому, что «привет» не отображается в виде матрицы в виде прямой линии:
H E i l
x L p q
c L O m
Если вы хотите, чтобы прямолинейный только слова, то хорошо (этокак я всегда понимал эти головоломки для работы в любом случае), но если на самом деле вы хотите найти слова в стиле змеиный , то рекурсивный поиск, такой как Zilchonum и BlueRajaпредложение было бы хорошей ставкой.Только будьте осторожны, вы не зацикливаетесь на уже использованных вами письмах.
2) В любом случае ваша функция verifyWord()
также имеет некоторые проблемы: по крайней мере, она должна возвращать некоторыезначение в случае, когда вы выходите из цикла while (low < high)
.
Несмотря на это, он все равно не будет делать то, что вы хотите: например, скажем, ваш словарь содержит {"ant", "bat" "hello", "yak", "zoo"}
, и вы вызываете verifyWord()
с str="hel"
, вы хотели бы вернуть значение 2, но в данный момент он делает это:
step low mid high
0 0 0 5 // initialise
1 0 2 5 // set mid = (0+5)/2 = 2... words[2] == "hello"
2 0 2 1 // "hel" < "hello" so set high = mid - 1
3 0 0 1 // set mid = (0+1)/2 = 0... words[0] == "ant"
4 1 0 1 // "hel" > "ant" so set low = mid + 1
5 // now (low<high) is false, so we exit the loop with mid==0
Вместо того, чтобы сравнивать «hel» с «hello», возможно, вы былучше обрезать слова в словаре до длины, равной str: т.е. сравнивать str
с word[mid].substr(0,str.length())
?