给定矩阵,我如何确定某些值是否为邻居?

时间:2015-04-06 20:37:03

标签: 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

&validateMatrix($number2search,\@matrix);

sub validateMatrix{
    my($a,$d) = @_;
    my @s = split(",",$a);
    my @matrix = @{$d};

    ???
    ??
    return(true or false)
}

1 个答案:

答案 0 :(得分:1)

我不确定你认为算法中的邻居是什么。矩阵被认为是周期性的吗?在任何一种情况下,算法如下。

  1. 创建从数字到起始位置的映射:数字哈希到位置数组。
  2. 为所有位置创建一个邻居映射:位置哈希值(数字哈希值到位置数组) - 如果你只能有一个具有该数字的邻居,则只需要哈希数字位置。
  3. 对于每个搜索字符串:
    1. 初始化开始映射返回的数组的位置可能性。
    2. 迭代剩余数字,从邻居映射中获取下一个位置,以确定可能性。
    3. 如果你没有可能的位置,那就不匹配了。
  4. 第2步是可选的,因为您可以在搜索步骤中迭代查找匹配的邻居,但它有助于区分问题。

    开始映射也可以被认为是一个与所有其他位置相邻的特殊位置,这也简化了后面的算法,因为你没有特殊情况下搜索字符串中的第一个数字。