• python 迷宫问题


    # -*- coding:utf-8 -*-
     
    from collections import deque   # 引入队列
     
    maze = [
        [1,1,1,1,1,1,1,1,1,1],
        [1,0,0,1,0,0,0,1,0,1],
        [1,0,0,1,0,0,0,1,0,1],
        [1,0,0,0,0,1,1,0,0,1],
        [1,0,1,1,1,0,0,0,0,1],
        [1,0,0,0,1,0,0,0,0,1],
        [1,0,1,0,0,0,1,0,0,1],
        [1,0,1,1,1,0,1,1,0,1],
        [1,1,0,0,0,0,0,0,0,1],
        [1,1,1,1,1,1,1,1,1,1]
     ]
     
    # 四个移动方向
    dirs = [
        lambda x,y: (x+1, y),   # 下
        lambda x,y: (x-1, y),   # 上
        lambda x,y: (x, y-1),   # 左
        lambda x,y: (x, y+1)    # 右
    ]
     
     
    def print_r(path):
        """打印路径"""
        curNode = path[-1]    # 最后一个节点
        realpath = []         # 出去的路径
        while curNode[2] != -1:   # 判断最后一个节点的标记是否为-1,如果是-1说明是起始点,如果不是-1就继续查找
            realpath.append(curNode[0:2])   # 拿到并添加节点x,y坐标信息
            curNode = path[curNode[2]]      # 这里curNode[2]是当前节点的前一步节点的标识:path的下标,因此path[curNode[2]]拿到前一节点
     
        realpath.append(curNode[0:2])       # 在这里curNode[2] == -1,是迷宫起点,将坐标信息加入路径
     
        realpath.reverse()    # 将列表倒序,将前面生成的从后往前的列表变为从前往后
        print(realpath)
     
     
    def maze_path_queue(x1, y1, x2, y2):   # (x1,y1)代表起点;(x2,y2)代表终点
        """用队列实现迷宫问题——深度优先搜索"""
        queue = deque()   # 创建队列
        queue.append((x1, y1, -1))    # 加入起点,第三个参数是记录时谁让它来的,这里起始点设置为-1
        path = []   # 保存出队节点
        while len(queue) > 0:   # 只有队不空就一直循环
            curNode = queue.pop()  # 队首节点出队,并存为当前节点变量
            path.append(curNode)   # 添加到path列表
            if curNode[0] == x2 and curNode[1] == y2:   # 判断是否找到终点
                print_r(path)   # 如果到达终点,打印路径
                return True
     
            for dir in dirs:    # 搜索四个方向
                nextNode = dir(curNode[0], curNode[1])    # curNode[0],curNode[1]分别是当前节点x、y
                if maze[nextNode[0]][nextNode[1]] == 0:   # 如果有路可走
                    queue.append((nextNode[0], nextNode[1], len(path) - 1))   # 后续节点进队,标记谁让它来的:path最后一个元素的下标
                    maze[nextNode[0]][nextNode[1]] = 2   # 设置为2,标记为已经走过
     
        else:   # 如果队列为空(当前节点到了死路,节点删除没有新节点加入),没有路
            print("没有路")
            return False
     
     
    maze_path_queue(1,1,8,8)

  • 相关阅读:
    设置zookeeper开机自启动
    安装zookeeper
    Elasticsearch 5.6.5 安装head插件
    [redis] Node is not empty. Either the node already knows other nodes
    【redis】 redis 创建集群时,Waiting for the cluster to join.... 一直等待
    [redis] redis.clients.jedis.exceptions.JedisDataException: MOVED 13102 127.0.0.1
    [linux] FastDFS访问文件,400 Bad Request
    [linux] Nginx编译安装错误error: the HTTP rewrite module requires the PCRE library
    [java] java解析txt文件
    【java】 java 解压tar.gz读取内容
  • 原文地址:https://www.cnblogs.com/sea-stream/p/11100396.html
Copyright © 2020-2023  润新知