先上运行代码后的视频:人工智能导论之深度优先搜索演示https://www.zhihu.com/video/1173641673426378752深度优先搜索演示之大地图https://www.zhihu.com/video/1173667844352057344

再上一个深度受限树搜索算法的伪代码表示:

最后贴上我的代码

def depthFirstSearch(problem):

"""

Search the deepest nodes in the search tree first.

Your search algorithm needs to return a list of actions that reaches the

goal. Make sure to implement a graph search algorithm.

To get started, you might want to try some of these simple commands to

understand the search problem that is being passed in:

print("Start:", problem.getStartState())

print("Is the start a goal?", problem.isGoalState(problem.getStartState()))

print("Start's successors:", problem.getSuccessors(problem.getStartState()))

"""

"*** YOUR CODE HERE ***"

def Recursive_DFS(node,problem,solution,closedSet):

# 测试当前送进来的节点是否满足目标要求,如果是一个可行解,就返回行动方案

if problem.isGoalState(node):

return solution

# 否则,就构造循环遍历这个节点的所有子节点

else:

for child,direction,cost in problem.getSuccessors(node):

# 如果子节点是还没有计算过的节点,就开始继续往下走

if child not in closedSet:

# 在行动方案中增加当前子节点的执行动作

solution.append(direction)

# 然后把这个子节点增加到计算过的节点集合中

closedSet.add(child)

# 调用递归函数继续从当前子节点往下计算

result = Recursive_DFS(child,problem,solution,closedSet)

# 判定一下计算结果

if result!=False:

# 如果找到了可行路线,则把行动方案返回出去吧

# 附带一句:return有停止当前函数继续运行的效果哟!

return solution

else:

# 如果从这个节点往下没有可行路线,就要撤销刚才的执行动作

solution.pop()

# 这个else和for对应,表示所有的子节点都遍历过了,没找到合适的行动方案,查找失败

else:

return False

solution = []

# 因为我们的数据结构是图,不是树,所以要构造一个集合用于判定某个节点是否已经算过了,否则会死循环

closedSet = set()

# 一开始把初始位置加入上述集合中,意味着Pacman不能经过这个节点了

closedSet.add(problem.getStartState())

# 调用递归函数进行问题求解,多一个参数就是上面的集合

solution = Recursive_DFS(problem.getStartState(),problem,solution,closedSet)

return solution

因为CSS188的作业要求尽量按照课堂幻灯的算法描述进行编程,所以下方的代码和上面的算法描述有一些不一致,但是我的注释可以帮助你理解这个程序,两个算法的基本思想还是类似的:

def depthFirstSearch(problem):

"""Search the deepest nodes in the search tree first.Your search algorithm needs to return a list of actions that reaches thegoal. Make sure to implement a graph search algorithm.To get started, you might want to try some of these simple commands tounderstand the search problem that is being passed in:print("Start:", problem.getStartState())print("Is the start a goal?", problem.isGoalState(problem.getStartState()))print("Start's successors:", problem.getSuccessors(problem.getStartState()))"""

"*** YOUR CODE HERE ***"

# 初始化搜索状态

fringe = util.Stack()

node = {"state":problem.getStartState(), "path":[], "cost":0}

fringe.push(node)

explored = set()

# 构造循环展开搜索树

while (not fringe.isEmpty()):

# 获得待判定的叶子节点

node = fringe.pop()

# 判断节点是否满足目标要求,如果是一个可行解,就返回行动方案

if problem.isGoalState(node["state"]):

return node["path"]

# 否则,就继续从这个叶子节点往下展开

else:

# 先判断一下这个节点是不是已经展开过了,避免重复展开

if node["state"] not in explored:

for nextnode in problem.getSuccessors(node["state"]):

# 为了适应可能的数据结构为图,必须判定叶子节点是否已经访问过

if nextnode[0] not in explored:

nextnode = {"state":nextnode[0],

"path":node["path"]+[nextnode[1]],

"cost":node["cost"]+nextnode[2]}

# 如果没有访问过,就将叶子节点添加到待搜索的节点集合中

fringe.push(nextnode)

# 最后不要忘记把搜索过的节点添加到访问过的节点集合中

explored.add(node["state"])

GitHub地址:xuejing80/learnpython​github.com

python反恐精英代码类似的编程_敲代码学Python:CS188之实现深度优先搜索相关推荐

  1. python反恐精英代码类似的编程_敲代码学Python:CS188之实现一致代价搜索

    照例先上视频:人工智能导论之一致代价搜索演示https://www.zhihu.com/video/1176109979474620416 再上算法伪代码描述: 接着,就是代码: def unifor ...

  2. python画画用哪库好_小白开始学Python最著名的绘图库

    原标题:小白开始学Python最著名的绘图库 这是菜鸟学Python的第101篇原创文章 数据分析里面可视化是重要的环节,辛苦把数据采集,然后经历了很多工序的清洗之后,最后要展现给用户,最好的方法就是 ...

  3. 趣学python教孩子学编程_《趣学Python——教孩子学编程》学习笔记第1-3章

    第1章 Python不是大蟒蛇 1.1 关于计算机语言 计算机程序是一组让计算机执行某种动作的指令.软件就是计算机程序的集合. 一种编程语言就是一种特定的与计算机交谈的方式,这种方式使用计算机和人都能 ...

  4. python小海龟画房子编程_教孩子学Python编程之海龟画图(一)

    大家好,我是践行计算机教育刘老师,很高兴跟大家分享Python编程,建议5年级以上的学生学习.父母也可以陪着孩子一起学习Python编程,对于孩子学编程起到监督和辅助学习.下载我们Python编程工具 ...

  5. python赋值语句的一般格式为_[零基础学Python]赋值,简单也不简单

    变量命名 在<初识永远强大的函数>一文中,有一节专门讨论"取名字的学问",就是有关变量名称的问题,本温故而知新的原则,这里要复习: 名称格式:(下划线或者字母)+(任意 ...

  6. 转行python能拿到多少钱_想转行学python过来人提醒大家几点

    因为目前python非常火,应用也非常广泛,是目前最火的行业之一,竞争很大,工资很高,未来发展也极好. Python 现在到底有多热呢?我觉得我们可以看以下的这2组数据. 第一:Python 排名稳居 ...

  7. python删除文件夹无法访问_人生苦短 我学Python——anaconda和Jupyter notebook安装使用...

    一.人生苦短 我学Python 为什么学习Python? 1.应用范围广 很多网站是用Python开发的,比如豆瓣,还有YouTube等等. 2.效率高,和其他编程语言对比,可以用少得多的代码写出相同 ...

  8. python入门到熟练要多久_零基础学python要多久

    零基础进行Python学习的话,如果选择自学,一般学习周期在一年半左右.选择进行培训的话,学习Python周期一般在五到六个月左右,不过学习的种类不同,班级不同,培训周期也是存在一定差异的. 零基础学 ...

  9. python在匿名函数作和_跟光磊学Python开发-匿名函数函数和高阶函数

    跟光磊学Python开发-匿名函数函数和高阶函数 跟光磊学Python开发-匿名函数函数和高阶函数跟光磊学Python开发 匿名函数 匿名函数就是函数定义时没有名字的函数,也称为匿名表达式. 普通函数 ...

最新文章

  1. 地图测量面积工具app_全站仪的使用面积测量
  2. P1197 [JSOI2008]星球大战
  3. 深入探索 Java 热部署--转
  4. WebRTC 系列之视频辅流
  5. Kaggle狗的种类识别竞赛——基于Pytorch框架的迁移学习方法
  6. linux 定时切割日志,Linux 定时切割日志任务
  7. left join 和 inner join
  8. LeetCode 165. 比较版本号
  9. 计算机和单片机概述,微机与单片机概述课件.ppt
  10. [VC]socket含义
  11. 【宝藏系列】推荐几款免费的视频转文字字幕的软件
  12. 【Python】国内生产总值分析预测
  13. 在线作图 grapheditor
  14. R语言 WDI包的使用
  15. 我的一次意义不同的旅行
  16. 本地电脑ssh连接机器人,使用rviz控制机器人导航
  17. PTA-至多删三个字符:动态规划
  18. 直线斜率、交角、转向角
  19. 常用的色彩体系简单介绍
  20. 技巧||一种简单的pcb板贴片流程

热门文章

  1. Windows查看电脑的IP地址
  2. python做后端开发的优点_python作为后端语言的优缺点
  3. vs代码自动补全快捷键html,VSCode 自动补全(智能提示)
  4. oracle约束名最大长度,Oracle中表名的最大长度是多少?
  5. 太阳系c语言代码大全,C生万物,编程之本!
  6. Hadoop集群搭建之Hadoop组件安装
  7. Spring控制反转和依赖注入的好处
  8. html怎么让两个表单并行,HMLT/CSS:如何将一个表单分成两个部分,使其并排显示?
  9. python 二维列表转换为DataFrame
  10. vulnhub_Bizarre Adventure: Joestar