兩種結構:一組和列表。
在該集合中,存儲已經訪問過的節點。這會阻止您遵循循環。
該列表是包含以下對象的列表:(1)節點,以及(2)返回到找到它的節點的指針。
從開始節點開始,將它添加到集合中,用空回引用將它添加到列表中,然後將其可以到達列表的所有節點添加到列表中對索引0的反向引用(起始節點)。
然後其後列表中的每個元素,直到你到達終點,請執行下列操作:
- 如果是在設定已經跳過它(你已經訪問過它),並移動到列表中的下一項。
- 否則,將其添加到該集合中,並將其可以到達的所有節點添加到列表的末尾,並將反向引用添加到您正在查看的索引中。然後轉到列表中的下一個索引並重復。
如果您在任何時候到達終端節點(最好是因爲您將它添加到列表中 - 而不是在列表中訪問它),請通過對起始節點的反向引用進行跟蹤並將反轉路徑。
實施例:
鑑於節點0至3,其中
NODE0 - >節點1
NODE0 - >節點2
節點1 - >節點2
節點2 - >節點3
和NODE0是START和節點3是END
SET = {}
LIST = []
步驟1 - 添加STAR T:
SET = {NODE0}
LIST = [[NODE0,空]]
步驟2 - 在該列表的索引0 - 添加可達節點:
SET = {NODE0 ,節點1,節點2}
LIST = [[NODE0,空],[節點1,0],[節點2,0]]
步驟3 - 在該列表的索引1 - 添加可達節點:
node2已經在SET中。跳過將可達節點添加到LIST。
SET = {NODE0,節點1,節點2}
LIST = [[NODE0,空],[節點1,0],[節點2,0]]
步驟4 - 在索引2列表 - 添加可達節點:
SET = {NODE0,節點1,節點2,節點3}
LIST = [[NODE0,空],[節點1,0],[節點2,0],[節點3,2 ]]
第5步 - 到達END,no w回溯:
插入到列表中的END節點(node3)對列表中的索引2具有反向引用,該索引是node2。這對列表中的索引0有一個反向引用,即node0(START)。反轉這一點,你會得到node0 - > node2 - > node3的最短路徑。
有人有家庭作業! ;-) – 2009-02-18 19:29:15
既然你在尋求幫助理解,那麼如果你告訴我們你不瞭解哪一部分就會很好。 – 2009-02-18 20:30:13
尼克 - 我希望我在學校,它是一個愛好遊戲。 Rob - 我確實(沒有)不理解我如何能夠繞過整個線性陣列。 – 2009-02-19 18:07:05