python 广度优先_Python,递归广度优先搜索

我试图找到网格上的最短路径(元组列表)

到目前为止我已经知道了:def planPath(self, x, y, goal, board):

visited = []

path = []

def pathFinder(curr):

visited.append(curr)

neighbors = None

if curr == goal:

visited.append(curr)

return curr

neighbors = [neighbor for neighbor in curr.neighbors if type(neighbor) is not Land.Water and neighbor not in visited]

neighbors.sort(key=lambda neighbor: abs(neighbor.location[0] - goal.location[0]) + abs(neighbor.location[1] - goal.location[1]) + abs(neighbor.elevation - goal.elevation), reverse=False)

x,y是当前的位置,很明显,board是,整个board。当时的想法是它是递归的。对于每个呼叫,我都会得到当前节点的邻居,过滤掉水(不可追踪)和被访问的节点。然后按离目标最近的排序。

下一步我想做一个广度优先的搜索。所以我会扩展所有的邻居,然后扩展每个邻居等等。每一个分支都会继续,直到他们没有邻居,他们将不返回,并完成。最后的结果是,唯一能返回的是第一个到达目标的分支,即最短的分支。有人知道我怎么做吗?

我在想:for neighbor in neighbors:

next = pathFinder(neighbor)

if next:

visited.append(cure)

return curr

else: return None

但是,如果我错了,请纠正我,但这将导致深度优先搜索,而不是广度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值