迷宫问题 深度优先搜索 广度优先搜索 宽度优先搜索【python】


一、实验内容

  1. 下载mymaze.py文件maze1.txt,maze2.txt,maze3.txt以及requirements.txt几个文件,将它们放于同一个文件夹中,安装相应的环境定义。
  2. 读懂文件中所给的类和函数,请按照mymaze.py中的提示,补全代码,执行深度优先搜索和广度优先搜索的代码并对结果进行记录。

二、深度优先搜索和广度优先搜索总结

1.深度优先搜索算法

  • 总是先扩展frontier表中最深的结点
  • Frontier是一个栈结构——后进先出
    请添加图片描述

2.广度优先搜索算法

  • 总是先扩展frontier表中最浅的结点
  • Frontier是一个队列结构——先进先出
    请添加图片描述

三、实验代码和用于测试的迷宫

1.实验代码

#!/usr/bin/python
# -*- coding:utf-8 -*-

class Node():
    def __init__(self, state, parent, action):
        self.state = state
        self.parent = parent
        self.action = action


class StackFrontier():
    def __init__(self):
        self.frontier = []

    def add(self, node):
        self.frontier.append(node)

    def contains_state(self, state):
        return any(node.state == state for node in self.frontier)

    def empty(self):
        return len(self.frontier) == 0

    def remove(self):
        if self.empty():
            raise Exception("empty frontier")
        else:
            #please add your code here to get a node from the frontier, according to FIBO
            #请在下面添加你的代码,从frontier表中按照后进先出的顺序移除一个结点,并将移除的结点给node
            node = self.frontier[-1]
            #after remove a node ,your frontier should adaptive accordingly
            #在移除了一个结点后,你的frontier表应该相应的更新
            del self.frontier[-1]
            
            return node


class QueueFrontier(StackFrontier):

    def remove(self):
        if self.empty():
            raise Exception("empty frontier")
        else:
            #请添加你的代码,按照先进先出的顺序移除结点
            node = self.frontier[0]
            #请更新frontier表,使得frontier表为移除了一个结点剩下的结点组成
            del self.frontier[0]
            return node

class Maze():

    def __init__(self, filename):

        # Read file and set height and width of maze
        with open(filename) as f:
            contents = f.read()

        # Validate start and goal
        if contents.count("A") != 1
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋千的千秋

希望你喜欢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值