两种结构:一组和列表。
在该集合中,存储已经访问过的节点。这会阻止您遵循循环。
该列表是包含以下对象的列表:(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