C++ C+中的单词搜索游戏算法+;

C++ C+中的单词搜索游戏算法+;,c++,search,matrix,word,C++,Search,Matrix,Word,我目前正在写一个游戏,以蛇形的方式在矩阵中找到输入的单词。下面是对游戏的简要说明 用户将首先被要求输入一个文件名,其中包含用于创建矩阵的行。创建之后,用户将被要求输入一个要在该矩阵中搜索的单词。搜索范围仅限于南部、东部和东南部。如果找到单词,则显示坐标并显示一些消息。示例矩阵如下所示: 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 我已经设法在这个矩阵中搜索像“退出”这样的词,但我的问题是像“仅仅

我目前正在写一个游戏,以蛇形的方式在矩阵中找到输入的单词。下面是对游戏的简要说明

用户将首先被要求输入一个文件名,其中包含用于创建矩阵的行。创建之后,用户将被要求输入一个要在该矩阵中搜索的单词。搜索范围仅限于南部、东部和东南部。如果找到单词,则显示坐标并显示一些消息。示例矩阵如下所示:

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;
bool Search(tmatrix&m,tmatrix&c,const string&w,int i,int j,int index)//m是要搜索的矩阵//w是单词//i,j是矩阵的坐标{
如果(m[i][j]==w[index])
{
c[index][0]=i;//c矩阵用于保持单词的坐标
c[指数][1]=j;
如果(索引!=w.length()-1)
{
如果((i
}

intmain()
{
bool IsFound=false;//检查是否在矩阵中找到该单词
tmatrix coord(word.length(),2);//另一个矩阵,用于保存找到的单词的坐标。
//它与单词索引和矩阵行索引一起工作。
对于(int i=0;icout只需添加额外的布尔矩阵,这表明使用了word。因此,在调用search之前,将该布尔值设置为invalid,在执行该方向之前,检查是否“unused”

无效搜索(tmatrix&m,tmatrix&c,const string&w,int i,int j,int index){ 如果(m[i][j]==w[index]) { c[指数][0]=i; c[指数][1]=j; 如果(索引!=w.length()-1) { 如果((i

将函数改为此解决了我所有的问题。谢谢你的评论,他们启发了我。

我不太明白这一点,你建议我在调用主搜索函数或递归调用之前添加一个额外的布尔矩阵吗?问题是你必须知道是否使用了char。另一种方法是,你可以lso将char替换为null char或类似内容,然后在从递归返回后将其放回。您能解释一下这里发生了什么吗?您只是复制了解决方案。乍一看没有有用的信息
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;
            }
}
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;
} }