astar.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:pysnake 作者: archtaurus 项目源码 文件源码
def solve(self):
        self.path = []
        if self.node_array and self.start_node and self.end_node:
            closed_nodes = set()
            opened_nodes = []
            heapq.heapify(opened_nodes)
            heapq.heappush(opened_nodes, (self.start_node.f, self.start_node))

            # ??????????
            while opened_nodes:
                # ?????????f????node
                f, node = heapq.heappop(opened_nodes)
                # ???node???????, ??????
                closed_nodes.add(node)

                # ????????????? self.path (???????)
                if node is self.end_node:
                    self.path = []
                    while node is not self.start_node:
                        self.path.append((node.x, node.y))
                        node = node.p
                    self.path.append((self.start_node.x, self.start_node.y))
                    self.path.reverse()
                    return                  # ???????

                # ??????????
                adj_nodes = self.get_adjacent_nodes(node)
                for adj_node in adj_nodes:
                    # ????????, ??????
                    if adj_node.r and adj_node not in closed_nodes:
                        # ??????????????
                        if (adj_node.f, adj_node) in opened_nodes:
                            # ???????????????????????
                            if node.g < adj_node.g:
                                self.update_node(adj_node, node)
                        else:
                            # ?????????, ??????????
                            self.update_node(adj_node, node)
                            heapq.heappush(opened_nodes,
                                           (adj_node.f, adj_node))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号