C++中的文字搜寻游戏算法
Word Hunting Game algorithm in C++
我目前正在编写一个游戏,该游戏以奇怪的方式在矩阵中找到输入的单词。以下是对游戏的简要解释。
用户将首先被要求输入一个文件名,其中包含创建矩阵的行。创建后,用户将被要求在该矩阵中输入要搜索的单词。搜索方向仅为南部、东部和东南部。如果找到单词,则显示坐标并显示一些消息。下面是一个示例矩阵:
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
我已经设法在这个矩阵中搜索到了像"exit"这样的单词,但我的问题是像"mere"或"table"这样的词。在我的算法中,我只能在两个方向上搜索不具有相同字母的单词。我找不到合适的方法。
这是我代码的搜索部分。
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
更改为if
对我不起作用。
只需添加额外的布尔矩阵,就可以告诉使用了这个词。因此,在调用搜索之前,将该布尔值设置为无效,并在执行该方向之前,检查是否"未使用"
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;
} }
把函数改成这个解决了我所有的问题。感谢您的评论,他们激励了我。
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 在C++游戏中与库存系统作斗争
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 井字游戏具有奇怪行为的最小最大值算法(C++)
- 用于井字游戏故障的最小最大算法
- 实现井字游戏的极大极小算法
- 游戏的匹配算法
- 在C++中实现井字游戏的最小最大值算法
- 自动多人游戏中的坑洞,玩家可以使用自己的算法
- C++中的文字搜寻游戏算法
- 允许测试AI算法的游戏
- 2d游戏引擎裁剪算法