我有一个定义矩阵维的输入,然后 我有一个具有该维度的方阵,其中包含作为输入的随机字母,我有一个输入字符串,我想搜索矩阵中的字符串,我可以在从左到右水平,垂直向下或对角线向左(向上和向下)
对给定矩阵的解释
n = 3
A A K
A S K
A K K
00 01 02
00 A A K
10 A S K
20 A K K
对于给定的字符串ASK,我必须搜索所有出现的“ ASK”
输出将为 4
,因为出现了四次“ ASK”
2是简单的一个:01,11,21,其次是10,11,12
但是我不明白如何匹配该字符串以对角线向上或向下向左。 第三名:02,11,20和第四名:22,11,00
答案 0 :(得分:0)
对于从左到下的对角线搜索,您应该使用类似以下的循环, 假设它与行有关,j与列有关,并且 这两个索引的左上角都以零开头:
对于对角线搜索,应减少左上行,并增加列:
int i = n-1;
int j = 0;
while(i >=0 )
{
//access element x[i][j] and store to a resulting string
i--;
j++;
}
// compare resulting string to predefined string
对于对角线搜索,应从左至右向上减少行数和列数:
int i = n-1;
int j = n-1;
while(i >= 0)
{
//access element x[i][j] and store to a resulting string
i--;
j--;
}
// compare resulting string to predefined string
答案 1 :(得分:0)
首先,您必须找到组成一个组合的所有元组,以便可以读取字符串。
根据我的观点,为网格的每个位置分配特定编号会更容易,因此在3x3矩阵中,它将是:
A H G # A is 1; H is 2; G is 3; next line: C is 4; B is 5...
C B M
F U S
因此,制定一个通用的解决方案来确定数字将它们按列表排序(我不知道您的输入格式,所以我认为它是列表):
m = ['A', 'H', 'G', 'C', 'B', 'M', 'F', 'U', 'S']
接下来,要查找所有元组,我们需要查看上面的示例。
在列表多数民众赞成的位置,[0, 1, 2], [3, 4, 5], [6, 7, 8], [0, 3, 6], [1, 4, 7], [2, 5, 8]
最后[0, 4, 8], [2, 4, 6]
。
这是一种解决以下问题的算法:
def findTp(dimension):
l1 = []
l2 = []
lRes = []
lR = range(0, dimension**2)
for c in range(dimension**2):
l1.append(lR[c:c+dimension])
lRes.append(l1[::dimension])
lR = []
for i in range(dimension**2):
lR.append(i)
for i in range(dimension):
lRes.append(lR[i::dimension])
lR = []
for i in range(dimension**2):
lR.append(i)
lRes.append(lR[::dimension+1])
d = lR[dimension-1::dimension-1][:dimension]
lRes.append(d)
return lRes
接下来,我们将做一些魔术来将第一个列表提取到lRes
:
a = findTp(dimension)
b = a[1:]
c = a[0]
for i in c:
b.append(i)
现在,我们将结果存储在b
中。
希望有帮助。