我有一個矩陣,每個單元格都有一個布爾屬性。我需要確定一個循環,從具有boolean屬性false的單元格開始,並且此循環必須只包含具有布爾屬性設置爲true的單元格(顯然除了起始單元格)。另一個條件是週期中的任何兩個連續單元必須位於同一行(或同一列)上,並且週期中的三個連續單元不得位於同一行(或同一列)上。 實際上,您可以從一個單元格跳到另一個單元格,它們不必是鄰居,它們必須位於同一行或列中。 謝謝。確定一個矩陣的週期
回答
更新:我錯過了不需要在兩個相鄰單元格之間移動 - 這會擴大每個步驟中可能移動的數量,但並不會真正改變總體思路。
最容易實現的可能是depth-first search - 你從起始單元格開始,看看所有可能的移動 - 除了第一步移動以外最多有三種可能的移動。對於每個可能的移動,您都會以同樣的方式遞歸執行,直到您再次到達起始單元或者沒有可能的移動。在後面的情況下,你追蹤一個動作,並嘗試下一個可能性,如果剩下一個。
您必須傳遞最後一步移動的方向以及遞歸調用,因爲此方向對於下一步移動無效。如果不允許多次訪問單元格,則還必須跟蹤訪問的單元格,並在追蹤時取消標記。如果允許多次訪問單元格,則必須跟蹤之前訪問單元格時爲了避免循環而離開單元格的方向。
使用breath-first search而不是深度優先搜索將避免嘗試長時間的路徑,這是以解決大量部分解決方案爲代價的無解決方案。 A* search可能是另一個加快速度的選項。
備註:可能是因爲您第一次訪問該單元格時可能會直接採取其他舉措,因此幾次訪問某個單元沒有價值。第一次進入單元格時不允許移動的例外是 ,但我不確定這樣的路徑是否可行。
您只需跟蹤每個節點一位 - 節點是否已到達列移動或行移動。所以你也可以通過加倍節點數來實現這一點,而鏈接只能移動從一個標記爲「按列移動到此處」的單元格移動到同一行中標記爲「按行移動」的單元格中,這可能允許您使用某種標準圖形算法進行循環檢測。 – mcdowella
Daniel和mcdowella謝謝。我明白了,我只需要弄清楚如何實現遞歸,這樣我就可以知道何時停止: - ? – Cosmin
單個位真的夠嗎?無需區分分別從左,右,上,下進入?我的另一個想法是構建一個可能移動的有向圖,然後測試起始節點到起始節點的可達性。但是你需要每個單元有四個節點,因爲從入站方向的可能移動的依賴性,我認爲這可能是昂貴的方式。但是當再次考慮它時,它似乎比執行搜索便宜得多。 –
- 1. 確定一個矩陣是肯定的
- 2. 確定一個稀疏矩陣商
- 3. 一個給定的陣列中檢測一個週期
- 4. 確定在矩陣的每個元素周圍出現特定值的次數
- 5. 幫我做一個算法來確定一個矩陣的秩
- 6. 根據錨定日期確定一個特定的兩週
- 7. 以陣列選項出一個週期
- 8. 在一個巨大的稀疏矩陣中尋找所有的週期
- 9. 確定變換矩陣
- 10. 確定矩陣尺寸
- 11. 矩陣大小確定
- 12. Java中矩陣的Co因子(用於確定矩陣的逆矩陣)
- 13. 確定日期是週日/週末java
- 14. 指定矩陣作爲另一個矩陣的元素
- 15. 需要確定一個矩陣來對齊兩個三角形
- 16. 本週過濾器矩陣
- 17. 確定稀疏矩陣的稀疏性(Lil矩陣)
- 18. 從另一個矩陣製作矩陣
- 19. 結合矩陣產生一個矩陣
- 20. 從另一個矩陣生成矩陣
- 21. 連接矩陣到另一個矩陣
- 22. 創建一個特定的矩陣
- 23. 寫一個矩陣,返回周圍位置的位置
- 24. 按另一個矩陣中的值聚合一個矩陣
- 25. 使用JavaScript確定「週期」和星期
- 26. 給定一個矩陣,我如何確定矩陣的條目是否是獨立和相同分佈(IID)?
- 27. 一個2x2矩陣
- 28. 在一個矩陣中堆疊子矩陣3d矩陣
- 29. 紅寶石 - 確定一個值位於矩陣列
- 30. 確定矩陣是否至少有一個零元素
請在此設置中定義一個循環。 – alexraasch
一個循環將是一組單元格,數組中的第一個單元格將是起始單元格,其他所有單元格都必須遵守上述條件。細胞序列應以起始細胞結束。 – Cosmin
如果「循環中的任何兩個連續的單元格必須在同一行上」,則任何三個連續的單元格也必須在同一行中,違反了您的條件「循環中的三個連續單元格不得在同一行上」。可以說,A,B和C是三個連續的單元格。含義A和B是兩個連續的單元格,B和C是兩個連續的單元格。由第一個條件A和B在同一行,B和C在同一行。這顯然意味着A,B和C都在同一行。你現在所做的設置似乎是不可能的。你需要修改它。 – Spundun