Алгоритм игры в слова в С ++ - PullRequest
1 голос
/ 05 марта 2012

В настоящее время я пишу игру, которая находит вводимое слово в матрице змеиным образом.Вот краткое объяснение игры.

Сначала пользователю будет предложено ввести имя файла, содержащее строки для создания матрицы.После создания пользователю будет предложено ввести слово для поиска в этой матрице.Поиск только в направлении юг, восток и юго-восток .Если оно находит слово, отображает координаты и показывает какое-то сообщение.Ниже приведена примерная матрица:

m e r e t z
e x i t a v
p p w a b i
y u u b l l
a l l l a l
z k v e l o

Мне удалось найти слова типа «выход» в этой матрице, но моя проблема - слова типа «просто» или «таблица».В моем алгоритме я могу искать только слова, которые не имеют одинаковую букву в двух направлениях.Я не мог найти правильный способ сделать это.

Вот часть поиска моего кода.

bool Search(tmatrix<char>& m, tmatrix<int>& c, const string& w, int i, int j, int index)  // m is the matrix to search in  // w is the word  // i and j are coordinates of matrix {
if(m[i][j] == w[index])
{
    c[index][0] = i; // c matrix is to keep coordinates of words
    c[index][1] = j;

    if(index != w.length()-1)
    {
            if((i < m.numrows()-1) && (m[i+1][j] == w[index+1]))
                return Search(m, c, w, i+1, j, index+1);
            else if((j < m.numcols()-1) && (i < m.numrows()-1) && (m[i+1][j+1] == w[index+1]))
                return Search(m, c, w, i+1, j+1, index+1);
            else if((j < m.numcols()-1) && (m[i][j+1] == w[index+1]))
                return Search(m, c, w, i, j+1, index+1);
            else 
                return false;
    }
    else
        return true;
}
return false;

}

int main()
{
   bool IsFound = false;                    //to check whether the word is found or not in the matrix
            tmatrix<int> coord(word.length(), 2);   //another matrix to keep coordinates of found word's coordinates.
                                                    //it works with the index of words and the row index of matrix.

            for(int i = 0; i < m.numrows(); i++)
            {
                for(int j = 0; j < m.numcols(); j++)
                {
                    int index = 0;      //another variable to keep index number
                    IsFound = Search(m, coord, word, i, j, index);      //searches matrix for word and if found, makes IsFound's return value true
                    if(IsFound)
                    {
                        cout << "The word "<< word << " is found!\n";
                        cout << "Indices in which this word is found in the matrix are:\n";
                        for(; index < word.length(); index++)
                        {
                            cout << word[index] << ":\t" << coord[index][0] << "," << coord[index][1] << endl;
                        }
                        break;      //whenever it finds a match in matrix, it finishes search in loops
                    }
                }
                if(IsFound)
                    break;
            }
}

Он идет только в том направлении, которое сначала появляется в списке операторов if.Изменение else if s на if не сработало для меня.

Ответы [ 2 ]

0 голосов
/ 10 марта 2012
void Search(tmatrix<char>& m, tmatrix<int>& c, const string& w, int i, int j, int index) {
if(m[i][j] == w[index])
{
    c[index][0] = i;
    c[index][1] = j;

    if(index != w.length()-1)
    {
            if((i < m.numrows()-1) && (m[i+1][j] == w[index+1]))
            {
                Search(m, c, w, i+1, j, index+1);
            }
            if((j < m.numcols()-1) && (i < m.numrows()-1) && (m[i+1][j+1] == w[index+1]))
            {
                Search(m, c, w, i+1, j+1, index+1);
            }
            if((j < m.numcols()-1) && (m[i][j+1] == w[index+1]))
            {
                Search(m, c, w, i, j+1, index+1);
            }
    }
    else
        IsFound = true;
} }

Изменение функции в этом решило все мои проблемы. Спасибо за ваш комментарий, они вдохновили меня.

0 голосов
/ 05 марта 2012

Просто добавьте дополнительную логическую матрицу, которая говорит, что слово используется.Поэтому, прежде чем вызывать функцию поиска, установите для этого логического значения недействительное значение, а перед тем, как идти в этом направлении, проверьте, «не используется»

...