下面的问题是日报填字游戏的一个例子,在这里我们给出一个2维字符数组和问题陈述是找出从2维字符数组给定词maze.The搜索算法包括寻找从单个字符顶到-Bottom,从右到左,反之亦然,但不是对角线。
输入字符串字LAYS
2D String []-{“ LOAPYS”,“ KAYSOT”,“ LAYSST”,“ MLVAYS”,“ LAYSAA”,“ LAOYLS”};
输出-2D 字符数组中给定字符串的数量计数:7
说明-有了单词的字符串数组,我们必须从中找到单词“ LAYS”,可以在任何方向上搜索,例如上下,左右,上下和左右。每当找到给定的搜索字符串时,代码中的计数器标志就会累加,并在结果的末尾返回计数。在示例中,我们可以看到LAYS形成了7次,即
1-> L O A P YS -LAYS->从左到右
2 - >小号甲YA ö大号-LAYS(Right to Left)
3-> LAYSS T-LAYS(Left to Right)
4-> M L V AYS-LAYS(Left to Right)
5-> LAYSA A-LAYS(Left to Right)
6-> LA Ø YLS -LAYS(Left to Right)
7->(从下到上)红色图层
输入-字符串词-CAMP
2D字符串[]-{“ BLOOKS”,“ BPOOLK”,“ KOHPKB”,“ BOLKOK”,“ LKIOOB”,“ LAHYBL”}
输出-二维字符数组中给定字符串的数量计数:0
说明-:当我们得到单词的字符串数组时,我们必须从中找到单词“ LAYS”,可以在任何方向上搜索,例如上下,左右,上下和左右。每当找到给定的搜索字符串时,代码中的计数器标志就会累加,并在结果的末尾返回计数。在示例中,我们可以看到BOOK形成了0 次。
我们给与一个String(word)String数组,它和一些实用程序变量一起被传递到findString()进一步处理中。
然后遍历矩阵中的字符,并拾取一个字符以开始字符串。
对于已拾取的字符,我们根据算法在所有可能的方向上递归找到给定的字符串
如果找到匹配项,则计数器增加
在完成第一个起始字符之后,对下一个字符重复此过程
然后使用相应的匹配项计算计数总和
然后捕获最终答案,并打印结果。
#include <bits/stdc++.h> using namespace std; int utilitySearch(string word, int r, int c, string arr[], int maxR, int maxC, int index) { int count = 0; if (r >= 0 && r <= maxR && c >= 0) { if (c <= maxC && word[index] == arr[r][c]) { char res = word[index]; index = index + 1; arr[r][c] = 0; if (word[index] == 0) { count = 1; } else { count = count + utilitySearch(word, r, c + 1, arr, maxR, maxC, index); count = count + utilitySearch(word, r, c - 1, arr, maxR, maxC, index); count = count + utilitySearch(word, r + 1, c, arr, maxR, maxC, index); count = count + utilitySearch(word, r - 1, c, arr, maxR, maxC, index); } arr[r][c] = res; } } return count; } int findString(string word, int r, int c, string str[], int countR, int countC) { int count = 0; for (int i = 0; i < countR; ++i) { for (int j = 0; j < countC; ++j) { count = count + utilitySearch(word, i, j, str, countR - 1, countC - 1, 0); } } return count; } int main() { string word = "FLOOD"; string inp[] = {"FPLIOKOD","FLOODYUT","YFLOODPU","FMLOSODT","FILPOYOD", FLOOOODE " }; string str[(sizeof(inp) / sizeof( * inp))]; for (int i = 0; i < (sizeof(inp) / sizeof( * inp)); ++i) { str[i] = inp[i]; } cout << "二维字符数组中给定字符串数的计数: " << findString(word, 0, 0, str, (sizeof(inp) / sizeof( * inp)), str[0].size()); return 0; }
如果我们运行上面的代码,它将生成以下输出-
输出结果
二维字符数组中给定字符串数的计数: 6