2015-04-06 122 views
-1

我有一個矩陣給定一個矩陣,我該如何判斷一些值是否是鄰居?

([ 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) 
} 
+0

請顯示您所寫的代碼並描述您遇到的問題 – Borodin

+0

我需要關於perl如何解決上述問題的算法。感謝 – perlbie

+0

我已經使用A星尋路通過轉換不匹配的元素爲零試過,但還是......需要一個適當的算法來處理這個問題! – perlbie

回答

1

我不確定你算法中的鄰居是什麼。矩陣是否被認爲是週期性的?無論哪種情況,算法如下。

  1. 創建從數字到開始位置的映射:將數字散列到位置數組。
  2. 爲所有位置創建一個鄰居映射:散列位置(將數字散列爲陣列位置) - 或者只是將數字散列爲位置,如果只能有一個具有該數字的鄰居。
  3. 對於每個搜索字符串:
    1. 初始化由起始映射返回的數組的位置可能性。
    2. 遍歷剩餘的數字,從鄰居映射中獲取下一個可能的位置。
    3. 如果你沒有位置的可能性,這不是一個匹配。

第2步是可選的,因爲你可以只通過尋找搜索步驟中匹配的鄰居迭代,但它有助於分離出的擔憂。

和開始映射也可以被認爲只是一個特殊的位置,鄰居們所有其他位置,從而簡化了後來的算法,以及因爲你沒有特殊情況下,在搜索字符串的第一個數字。

+0

嗨; TimTom,感謝這個算法讓我可以將它用於腳本。 – perlbie

+0

嗨; TimTom,如果鄰居有多個相同的號碼,那麼返回的位置將不正確。 – perlbie

+0

這是正確的。這就是爲什麼在第二步,我們有位置的散列數的散列位置的陣列。我甚至專門打電話表示出來的意見是,如果你沒有,你可以做別的事情。 –

相關問題