【python】BFS
。
BFS,
找到一个节点,不是目标就顺便把他的子节点加入到队列中,这个是一层一层的关系。永远是先找完第一层,再找第二层,所以可以实现最短路径,树会比较容易理解。但是注意,该记录不讨论权重。
在这个里面涉及几个结构,队列和字典,列表
模板
初始化队列Q;
清除visited数组;
Q =起点S;
while(Q非空)
{
取队首元素U;出队;
if(U == 目标状态 && U在矩阵内) {…}
所有与U相邻且未被访问的状态入队;
标记U为已访问;
}’’’
例题1,马走日问题
下过象棋的人都知道,马只能走’日’字形(包括旋转90°的日),
现在想象一下,给你一个n行m列网格棋盘,
棋盘的左下角有一匹马,
请你计算至少需要几步可以将它移动到棋盘的右上角,
若无法走到,则输出-1. 如n=1,m=2,则至少需要1步;若n=1,m=3,则输出-1。
from collections import deque
def bfs(m,n):
dx = [2,1,-1,-2,-2,-2,1,2]
dy = [1,2,2,1,-1,-2,-2,-1]#写所有走的方向
v={
(x,y)