BFS例题详解
来源:互联网 发布:xampp怎么切换php版本 编辑:程序博客网 时间:2024/05/05 16:58
这道题目均来自白书第34页-36页;
个人觉得这个例题很好地表现了广度优先搜索是如何与队列先进先出(FIFO)的思想联系起来的,通过不断取得某个状态后能够达到的所有状态并将其加入队列, 并且由于队列本身的特性先加入队列的状态总是先得到处理,这样就达到了一个目的:总是先将需要转移次数更少的状态进行分析处理,换句话说就是总是取得了这个状态的树中更接近根部的节点,又或者是总是让搜索树的广度得到尽可能增加。
在这个问题中,找到从起点到终点的最短路径其实就是一个建立队列的过程:
1.从起点开始,先将其加入队列,设置距离为0;
2.从队列首端取出位置,将从这个位置能够到达的位置加入队列,并且让这些位置的距离为上一个位置的距离加上1;
3.循环2直到将终点添加到队列中,这说明我们已经找到了路径;
注意到在这个过程中,每次处理的位置所对应的距离是严格递增的,因此一旦找到终点,当时的距离就是最短距离;
同样基于这个原因,搜索可移动到的位置所使用的判断条件中不仅仅是不碰墙壁、不超过边界,还有一个就是没有到达过,因为如果已经到达了这个位置,这说明已经有更短的路径到达这个位置,这次到达这个位置的路径是更差的,不可能得到更好的最终解。
源代码:
声明:本文来自Jason Ranger的CSDN博客,链接:http://m.blog.csdn.net/article/details?id=50768661。
个人觉得这个例题很好地表现了广度优先搜索是如何与队列先进先出(FIFO)的思想联系起来的,通过不断取得某个状态后能够达到的所有状态并将其加入队列, 并且由于队列本身的特性先加入队列的状态总是先得到处理,这样就达到了一个目的:总是先将需要转移次数更少的状态进行分析处理,换句话说就是总是取得了这个状态的树中更接近根部的节点,又或者是总是让搜索树的广度得到尽可能增加。
在这个问题中,找到从起点到终点的最短路径其实就是一个建立队列的过程:
1.从起点开始,先将其加入队列,设置距离为0;
2.从队列首端取出位置,将从这个位置能够到达的位置加入队列,并且让这些位置的距离为上一个位置的距离加上1;
3.循环2直到将终点添加到队列中,这说明我们已经找到了路径;
注意到在这个过程中,每次处理的位置所对应的距离是严格递增的,因此一旦找到终点,当时的距离就是最短距离;
同样基于这个原因,搜索可移动到的位置所使用的判断条件中不仅仅是不碰墙壁、不超过边界,还有一个就是没有到达过,因为如果已经到达了这个位置,这说明已经有更短的路径到达这个位置,这次到达这个位置的路径是更差的,不可能得到更好的最终解。
源代码:
阅读全文
0 0
- BFS例题详解
- BFS例题
- BFS和队列例题
- BFS例题:A计划
- BFS的基本例题
- bfs例题:血色先锋军
- BFS经典例题Isenbaev number
- BFS经典例题:Maze迷宫
- BFS经典例题合集
- 划分子网例题详解
- 划分子网例题详解
- lua学习例题详解
- 指针例题详解
- 例题详解MapReduce过程
- POJ 2251 Dungeon Master (BFS例题)
- BFS经典例题—迷宫问题
- 训练第二周之BFS例题
- 紫书 例题7-8 Uva 10603 BFS
- 将echart的官方实例关系图发布到Web工程上
- Django基础
- Binary String Matching
- asp.net网站记录全局错误
- jni小结(Android studio版)
- BFS例题详解
- chromiumwebview裁剪总结
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- linux系统的搭建
- Java学习笔记整理06
- ThinkPHP5 模板渲染
- java面向对象总结
- 移动前端开发和 Web 前端开发的区别是什么?
- 字符串