Algorithm 给定一个矩阵,如何确定某些值是否为相邻值?

Algorithm 给定一个矩阵,如何确定某些值是否为相邻值?,algorithm,perl,matrix,Algorithm,Perl,Matrix,我有一个矩阵 ([ 1, 2, 3, 4], [ 5, 6, 7, 8], [ 9, 10, 11, 12], [ 13, 14, 3, 16], [ 2, 18, 19, 20]) 和一个搜索字符串。任务是找出搜索字符串中的数字是否是矩阵中沿x和y坐标彼此相邻的值 “2,7,12,16”应返回true “2,4,7,12”应返回true “1,6,8,12”应返回false “1,5,14,15”应返回false 我不确定你在算法中考虑了什么邻居。矩阵是否

我有一个矩阵

([  1,  2,  3,  4],
 [  5,  6,  7,  8],
 [  9, 10, 11, 12],
 [ 13, 14,  3, 16],
 [  2, 18, 19, 20])
和一个搜索字符串。任务是找出搜索字符串中的数字是否是矩阵中沿x和y坐标彼此相邻的值

  • “2,7,12,16”
    应返回true
  • “2,4,7,12”
    应返回true
  • “1,6,8,12”
    应返回false
  • “1,5,14,15”
    应返回false


我不确定你在算法中考虑了什么邻居。矩阵是否被认为是周期性的?在这两种情况下,算法如下所示

  • 创建从数字到起始位置的映射:数字哈希到位置数组
  • 为所有位置创建一个邻居映射:Hash of Position to(Hash of Number to Array of Position)——或者如果您只能有一个邻居具有该数字,则只需Hash of Number to Position
  • 对于每个搜索字符串:
  • 初始化起始映射返回的数组的位置可能性
  • 迭代剩余的数字,从邻居映射中获取下一个位置集,以确定可能性
  • 如果你没有位置的可能性,那就不是一场比赛
  • 步骤2是可选的,因为您可以在搜索步骤中遍历邻居以查找匹配项,但它有助于分离关注点


    起始映射也可以被认为是一个特殊的位置,与所有其他位置相邻,这也简化了后面的算法,因为您不必对搜索字符串中的第一个数字进行特殊处理。

    请显示您编写的代码,并描述您遇到的问题。我需要perl如何解决上述问题的算法。谢谢,我试过使用A-star寻路,将不匹配的元素转换为零,但仍然。。。。。。需要一个合适的算法来处理这个问题!!你好TimTom,谢谢你的算法,让我来完成脚本;TimTom,如果邻居有多个相同的号码,那么返回的位置将不正确。它是正确的。这就是为什么在第二步中,我们有一个从位置到数字的散列再到位置数组的散列。我甚至在评论中特别指出,如果你没有,你可以做其他的事情。也许你被第3.2步弄糊涂了,那没有一个结果。它是一组当前位置到一组下一个位置。Hi;TimTom,谢谢你的算法,正在工作。
    &validateMatrix($number2search,\@matrix);
    
    sub validateMatrix{
        my($a,$d) = @_;
        my @s = split(",",$a);
        my @matrix = @{$d};
    
        ???
        ??
        return(true or false)
    }