蓝桥杯-迷宫

news2024/12/23 3:30:49

没有白走的路,每一步都算数🎈🎈🎈

题目描述:

已知一个30行50列的方格,方格由0和1组成,1 表示障碍物,0表示可行的方块。人从最上边开始行走,逃出这个迷宫,走到最右下角的位置。每次可以行走的方向有上下左右四个位置。向下向上向左向右分别记作DULR,并且从最上边的位置到最下边的位置有很多方法,要求记录L,D,U,R,若有多种方法,要求输出所有记录当中长度最小且字典序最小的方法。

输入描述:

输入一个30x50的数据

输出描述:

数出最佳的方案

样例输入输出:

样例输入:

010000

000100

001001

110000

样例输出:

DRRURRDDDR

算法分析:

错误代码,在得到最后一个结果的时候,即到if条件之后,没有弹栈,就直接返回去。

一些感想:

从今天下午2点到下午5点钟,就一直在写这一道题目,本来想着一小时刷个10到算法题目的。

  • DFS在写迷宫求解最佳路径的时候,耗时较长,比BFS长。
  • DFS适用于求解行数列数都不太大的情况,此题中30x50就算行数列数较大的情况。超时了

此代码仍旧存在一些不足:当递归到最后一个点的时候,没有弹栈。

 没有处理l出现空的情况

错误代码: 

  • 没有弹栈,没有考虑deque以及l出现空的情况。
  • 没有对结果进行排序
import os
import sys
from collections import deque

d = [[1,0],[0,-1],[0,1],[-1,0]]
n = 4
m = 6
mp = [list(map(int,input()))for i  in range(n)]
flag = [[0 for j in range(m)]for i in range(n)]
q = deque()
l = []
res = []
def dfs(i,j):
    if i == n-1 and j == m-1:
        print(i,j)
        s = ''
        for k in range(len(l)):
            s+=l[k]
       ## print(s)
        res.append(s)
        return 
    for x in range(4):
        ni = i+d[x][0]
        nj = j+d[x][1]
        if 0<=ni<n and 0<=nj<m and flag[ni][nj]==0:
            if mp[ni][nj] == 0:
                q.append((ni,nj))
                flag[ni][nj] = 1
##                print(q) DLRU
                if x == 0:
                    l.append('D')
                elif x==1:
                    l.append('L')
                elif x==2:
                    l.append('R')
                elif x==3:
                    l.append('U')
             ##   print("1",q)
                dfs(ni,nj)
                print('---------')
               ## print("2",q)
    l.pop()
   ## print("3",q)
    x,y =q.pop()
    print(x,y)
    flag[x][y]=0

flag[0][0] = 1                
dfs(0,0)
print(res)
##print(l)   
##print(q)

样例通过代码:

此代码只是通过了样例,本题目的dfs会严重计算不出来,打算学习使用BFS来学习。

import os
import sys
from collections import deque

d = [[1,0],[0,-1],[0,1],[-1,0]]
n = 30
m = 50
mp = [list(map(int,input()))for i  in range(n)]
flag = [[0 for j in range(m)]for i in range(n)]
q = deque()
l = []
res = []
def dfs(i,j):
    if i == n-1 and j == m-1:
        a,b = q.pop()
        flag[a][b]=0
##        print(i,j)
        s = ''
        for k in range(len(l)):
            s+=l[k]
##        print(s)
        res.append(s)
        if l !=[]:
            l.pop()
            return
        return 
    for x in range(4):
        ni = i+d[x][0]
        nj = j+d[x][1]
        if 0<=ni<n and 0<=nj<m and flag[ni][nj]==0:
            if mp[ni][nj] == 0:
                q.append((ni,nj))
                flag[ni][nj] = 1
##                print(q) DLRU
                if x == 0:
                    l.append('D')
                elif x==1:
                    l.append('L')
                elif x==2:
                    l.append('R')
                elif x==3:
                    l.append('U')
##                print("1",q)
                dfs(ni,nj)
##                print('---------')
##                print("2",q)
    if l != []:
        l.pop()
##    print("3",q)
    if len(q) != 0:
        x,y =q.pop()
##        print(x,y)
        flag[x][y]=0

flag[0][0] = 1                
dfs(0,0)
print(res)
for i in range(len(res)):
    for j in range(i,len(res)):
        tmp = ''
        if len(res[i])>=len(res[j]):
            tmp = res[j]
            res[j] = res[i]
            res[i] = tmp
print(res)
def ord1(s):
    ans = 0
    c = 1
    for i in range(len(s)-1,-1,-1):
        ans += ord(s[i])*c
        c*=10
    return ans
for i in range(len(res)):
    for j in range(i,len(res)):
        tmp = ''
        if ord1(res[i])>=ord1(res[j]):
            tmp = res[j]
            res[j] = res[i]
            res[i] = tmp
print(res)

每日一句

好像时间一长,我们便会担心坚持的意义,会怀疑自己的努力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/196219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 之reflog回滚操作失误

前言 以前只知道有git log命令&#xff0c;并不知道有git reflog。今天一个偶然的机会&#xff0c;我不小心把自己前两天写的代码给整丢了&#xff0c;如果时几个小时的代码&#xff0c;我重新写一遍就算了&#xff0c;但是这次不一样&#xff0c;这次是非常重大的修改&#x…

openfeign集成sentinel实现服务降级

openfeign集成sentinel实现服务降级使用openfeign调用服务&#xff08;不含sentinel&#xff09;代码测试openfeign集成sentinel实现服务降级引入sentinel相关环境编写FeignClient注解接口的实现类在服务提供者中&#xff0c;认为添加异常代码&#xff0c;以供测试 / 或者不启动…

SpringBean的生命周期

下文要讲的均是spring的默认作用域singleton的bean的生命周期&#xff0c;对spring作用域不了解的可以 https://blog.csdn.net/hlzdbk/article/details/128811271?spm1001.2014.3001.5502 什么是SpringBean的生命周期 springBean的生命周期&#xff0c;指的是spring里一个be…

Python爬虫以及数据可视化分析之某站热搜排行榜信息爬取分析

目录前言一&#xff0c;确定目标二&#xff0c;发送请求三, 解析数据四, 保存数据pyecharts进行可视化“某站”数据排名前10视频类型“某站”标题标签可视化“某站”喜欢视频分类概况总结前言 本项目将会对“某站”热搜排行的数据进行网页信息爬取以及数据可视化分析 本教程仅…

数据结构:栈的学习

作者&#xff1a;爱塔居 专栏&#xff1a;数据结构 作者简介&#xff1a;大三学生&#xff0c;希望跟大家一起进步 目录 一、栈 1.1 概念 1.2 栈的使用 1.3 示例 二、栈的应用场景 2.1 改变元素的序列 2.2 逆波兰表达式求值 2.3 括号匹配 2.4 栈的压入、弹出序列 一、栈…

upstream sent duplicate header line: “Transfer-Encoding: chunked“

实际情景&#xff1a; 公司项目有一个下载文件的功能&#xff0c;没有经过Nginx代理之前&#xff0c;好好的&#xff0c;正常下载&#xff1b; 加入了Nginx代理之后&#xff0c;过Nginx访问就会有 err_empty_response 这个错误&#xff1b; 搞了半天&#xff0c;nginx.conf加入…

第一章 linux概述

第一章 Linux概述 1、为什么要使用Linux Linux内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支…

【蓝桥杯_学习_51单片机】矩阵键盘 状态机法

矩阵键盘 一.基础知识 在键盘中按键数量较多时&#xff0c;为了减少I/O口的占用&#xff0c;通常将按键排列成矩阵形式采用逐行或逐列的“扫描”&#xff0c;就可以读出任何位置按键的状态 矩阵键盘和独立按键一样&#xff0c;也需要进行消抖处理&#xff01; 于此补充一下抖…

c++之基础入门一

一、c的初始化typedef struct student {int age;char name[10];int num; }student;int main() {//在c中可以利用花括号进行初始化struct student student1{12,"zs",123456 };int a 10, b 20;int b{ 20 }, a{ 10 };double c{ 20 };int* p{ nullptr };int arr[10]{ 1…

Day877.数据空洞 -MySQL实战

数据空洞 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于数据空洞的内容。 数据库占用空间太大&#xff0c;把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f; 一个 InnoDB 表包含两部分&#xff0c;即&#xff1a; 表结构定义数…

我通过 tensorflow 预测了博客的粉丝数

前言&#xff1a;由于最近接触了 tensorflow.js&#xff0c;出于试一下的心态&#xff0c;想通过线性回归预测一下博客的粉丝走向和数量&#xff0c;结果翻车了。虽然场景用错地方&#xff0c;但是整个实战方法用在身高体重等方面的预测还是有可行性&#xff0c;所以就记录下来…

亚马逊云科技助力游戏上云学习心得-增长篇

云服务已经是大势所趋了&#xff0c;通过购置传统服务器来进行应用开发&#xff0c;无法与现代化敏捷的开发方法相结合&#xff0c;对于系统运维的难度也大大增加&#xff0c;而云服务的弹性伸缩、动态计费可以很好地帮助中小企业实现快速应用开发&#xff0c;使得产品的价值最…

LeetCode题目笔记——1337. 矩阵中战斗力最弱的 K 行

文章目录题目描述题目难度——简单方法一&#xff1a;暴力&#xff0c;统计代码/Python方法二&#xff1a;优化代码总结彩蛋题目描述 给你一个大小为 m * n 的矩阵 mat&#xff0c;矩阵由若干军人和平民组成&#xff0c;分别用 1 和 0 表示。 请你返回矩阵中战斗力最弱的 k 行…

Dubbo服务方消费方通信案例

文章目录Maven_服务方Maven_服务消费方测试通信使用注册中心自动找服务设置超时时间重试次数单独设置某个方法不可重试处理多版本的问题本地存根策略负载均衡策略Dubbo高可用服务降级服务降级实现方式Maven_服务方 pom文件&#xff0c;注意依赖的版本。 <properties><…

《无线电发射设备管理规定》解读

2022年12月22日&#xff0c;工业和信息化部公布了《无线电发射设备管理规定》&#xff08;工业和信息化部令第57号&#xff0c;以下简称《规定》&#xff09;。为了更好地理解和执行《规定》&#xff0c;工业和信息化部产业政策与法规司负责同志对《规定》进行了解读。 问题一 …

7.卷积神经网络

7.卷积神经网络 目录 从全连接层到卷积图像卷积 互相关运算&#xff08;手撕卷积&#xff09;卷积层图像中目标的边缘检测学习卷积核 填充和步幅 填充Padding步幅stride 多输入多输出通道 多输入通道多输出通道11 卷积层总结 池化层 最大池化层和平均池化层填充和步幅多个通道…

Matlab 与 Excel 文件的交互

事实上&#xff0c;excel可以解决绝大多数的建模问题&#xff0c;只不过&#xff0c;更加复杂。。。而且难以操作。。。其实可以看看excel的 功能还是很多的不过嘛 术业有专攻的 有专攻的多主体 NetLogo仿真 Comsol 。。。Excel 文件写入向量与张量的excel写入xlswrite(<pat…

JTAG 基础和svf specification介绍

参考&#xff1a; https://www.youtube.com/watch?vUuDf3q5aBjM https://zh.m.wikipedia.org/zh-cn/JTAG浅谈dft之boundary scan JTAG: Joint Test Action Group是开发IEEE 1149.1的工作组&#xff0c;1149.1定义了一个测试开发版上芯片的标准。现在变成了芯片的一个最常见…

yolov5增加iou loss,无痛涨点trick

yolo无痛涨点trick&#xff0c;简单实用 先贴一张最近一篇论文的结果 后来的几种iou的消融实验结果在一定程度上要优于CIoU&#xff0c;最新的WIoU暂时还没复现。 本文将在yolov5的基础上增加SIoU&#xff0c;EIoU&#xff0c;Focal-XIoU&#xff08;X为C,D,G,E,S等&#xff09…

使用Kindling 观测 Kubernetes 应用网络连接状态

kindling介绍&#xff1a; Kindling 解决的是&#xff0c;在不入侵应用的前提下&#xff0c;如何观测网络的问题&#xff0c;其功能主要是通过暴露内核事件来实现观测。如果主机内核版本高于 4.14&#xff0c;可以使用 eBPF 模块&#xff1b;如果主机内核是低版本&#xff0c;…