2013-02-22 77 views
2

我正在開發PHP中的棋盤遊戲,現在我有書面的算法問題...搜索矩陣尋路算法

遊戲板是一個多維數組($板[10] [10])定義電路板矩陣或矢量的行和列...

現在我必須通過完整的電路板循環,但具有動態的起點。例如用戶選擇單元格[5,6],這是循環的起點。目標是找到選定單元周圍的所有可用單元格,以找到移動方法的目標單元格。我認爲我需要一種高效而高效的方式來做到這一點。有沒有人知道一個算法循環通過矩陣/矢量,只有每個字段找到可用和使用的單元格?

額外的規則... 在附加的圖片是一個藍色的領域選擇(是比其他大一點)。可用的字段只在右側。左側是可用的,但目前選定的位置無法到達...我認爲這是一個額外的信息,這使得算法有點複雜....

大thx到目前爲止!

親切的問候

+0

可能在HTTP更approprate挑:// gamedev.stackexchange.com – 2013-02-22 09:35:19

+1

did not知道,這個網站存在^^但有道理 – swalter88 2013-02-22 09:39:47

回答

1

不能完全肯定,我得到了正確的需求,所以讓我重申他們:

你想通過與約10的N×N矩陣的所有元素-n的高效算法循環,開始在一個給定的元素(我,j)並按(i,j)的距離排序!?

我會循環通過從0到n/2的距離變量d 然後對於d循環的每個值,通過 - (2 * d)到+(2 * d)-1 挑選單元格(i + d,j + 1),如果i> = 0也爲每個單元必須應用模n來挑選(i + 1,jd),(i + 1,j + d) ,以映射負向索引回到矩陣。

這認爲矩陣基本上是一個圓環,粘合上下邊緣以及左右邊緣在一起。

如果你不喜歡,你可以讓d運行到n,而不是一個模運算只忽略矩陣外的值。

這些問題可以直接按照正確的順序給出字段。對於小領域,我懷疑在這個級別上的任何一種優化在大多數情況下都會產生很大的影響,尼古拉斯的做法可能同樣出色。

更新 我稍微修改了細胞爲了榮譽規則「只考慮是正確的,從當前列或同一列字段」

+0

比我的解決方案更令人印象深刻。如果N意外增長,我會遇到問題。 ;] +1 – 2013-02-22 10:01:05

+0

我想我不明白^^ sry。這是否尊重了上述左側和右側的問題? – swalter88 2013-02-22 10:06:19

+0

它現在確實考慮附加約束。 – 2013-02-22 10:13:58

0

如果你的地圖只有10×10,我會通過從[0] [0],收集所有可能的空間供玩家移動循環,然後品位的空間距離由目前的球員位置。 N很小,所以算法具有O(N^2)這一事實不應該影響你的性能。

也許某些算法背景較爲豐富的人有了一些自己的看法。

+0

theres額外的規則,我忘了寫...我將編輯主要評論 – swalter88 2013-02-22 09:46:42

+1

如果我的要求正確,您仍然必須對字段進行排序,這會增加複雜性的另一個因素。 – 2013-02-22 09:54:19