深度优先的思想是先记住当前的起点,然后选定一个方向一条道走到黑,若失败则回到起点再选定另外一个方向走到黑。
广度优先的思想是记住当前的起点,然后选定各个方向的相邻点作为新的起点,再继续。
可以看出,深度优先和广度优先都需要记住当前的起点,不同的是深度优先每次只需要记住一个方向的相邻点,广度优先则要记住所有方向的相邻点。
如下图:
对于深度优先来说:
选定1为当前节点,将节点1所有方向的节点进行保存,(此时存储2345)
选定2为当前节点(将节点2取出),将节点2所有方向的节点进行保存。(此时存储34567)
选定6为当前节点(将节点6取出),没有相邻节点了,在这里已经走到头,需要回头。(此时存储3457)
选定7为当前节点(将节点7取出),7没有相邻节点,在这里已经走到头,需要回头(此时存储345)
选定3为当前节点...
从上面可以看出,先存储的节点后取出,这是典型的栈数据结构,可以使用栈进行保存数据也可以使用递归算法。
对于广度优先来说:
选定1为当前节点,将节点1所有方向的节点保,(此时存储2345)
选定2为当前节点(将节点2取出),将节点所有方向相邻节点保存(此时存储34567)
选定3为当前节点(将节点3取出),将节点所有方向相邻节点保存(此时存储4567)
选定4为当前节点(将节点4取出),将节点4所有方向相邻节点保存(此时存储5678)
选定5为当前节点(将节点5取出),将节点所有方向相邻节点保存(此时存储678)
选定6为当前节点...
从上面可以看出,先存储的节点先取出,这是典型的队列数据结构,所以可以使用队列进行保存数据。。