Gym - 101617D

本文介绍了一种解决迷宫最短路径问题的算法,针对 n*n 的迷宫地图,求解从左上角到右下角的最少步数,考虑了只能向右或向下移动且有最大跳跃距离 k 的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

转自


给出n*n的图,’.’能走,’#’不能走,k为最多能跳远的距离,每次只能往右或者往下走,求左上角到右下角最短需要多少步数。


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 2000+5;
const int inf = 0x3f3f3f3f;

char a[N][N];
int row[N], col[N], d[N][N];
int n, k;
void init()
{
    for( int i = 0 ; i <= n ; i ++ ){
        row[i] = col[i] = 0;
        for( int j = 0 ; j <= n ; j ++ ){
            d[i][j] = inf;
        }
    }
}
int main()
{
    freopen("in.txt","r",stdin);
    while( scanf("%d%d", &n, &k) != EOF ){
        init();
        for( int i = 0 ; i < n ; i ++ ){
            scanf("%s",a[i]);
            //printf("%s\n",a[i]);
        }
        d[0][0] = 0;
        for( int i = 0 ; i < n ; i ++ ){
            for( int j = 0 ; j < n ; j ++ ){
                if( a[i][j] == '#' ) continue;
                ///维护最接近当前点d[i][j]的最小步数到达的列的位置下标
                for( ; col[i] < j ; col[i] ++ )
                    if( j-col[i] <= k && a[i][col[i]] == '.' )
                        break;
                d[i][j] = min( d[i][j], d[i][col[i]]+1 );
                ///同上
                for( ; row[j] < i ; row[j] ++ )
                    if( i-row[j] <= k && a[row[j]][j] == '.' )
                        break;
                d[i][j] = min( d[i][j], d[row[j]][j]+1 );
                ///维护最优值,或许一直能有最优值,也不需要下面这两行了
                ///max(row*col) = 2000*2000
                ///row[0~N] && col[0~N]无重复判断
                ///行列各维护一个数组 max(row*col) * 2
                if( d[i][j] <= d[i][col[i]] ) col[i] = j;
                if( d[i][j] <= d[row[j]][j] ) row[j] = i;
            }
        }
        if( d[n-1][n-1] == inf ) printf("-1\n");
        else printf("%d\n", d[n-1][n-1] );
    }
    return 0;
}
### 如何在 Ubuntu 20.04 上安装 Gym-Gazebo 为了成功在Ubuntu 20.04上部署Gym-Gazebo环境,需遵循一系列特定指令来确保所有依赖项被正确处理。考虑到目标平台为Ubuntu 20.04 LTS版本,在此提供一套适用于该系统的安装指南。 #### 准备工作 首先确认系统已更新至最新状态并安装必要的工具包: ```bash sudo apt update && sudo apt upgrade -y sudo apt install git python3-pip wget cmake build-essential -y pip3 install --upgrade pip setuptools wheel ``` #### 安装 ROS (Robot Operating System) 鉴于Gym-Gazebo紧密集成ROS框架,因此需要先完成ROS的安装。对于Ubuntu 20.04推荐使用Noetic Ninjemys发行版: ```bash sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc -O - | sudo apt-key add - sudo apt update sudo apt install ros-noetic-desktop-full -y source /opt/ros/noetic/setup.bash echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc ``` #### 设置 Gazebo 模拟器 接着设置Gazebo模拟器,这里建议采用与ROS Noetic兼容的最佳匹配版本——即Gazebo11: ```bash sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list' wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add - sudo apt-get update sudo apt-get install gazebo11 libgazebo11-dev -y ``` #### 获取并编译 Gym-Gazebo 库 最后一步是从GitHub仓库克隆Gym-Gazebo项目源码,并按照官方说明文档中的指示进行本地构建: ```bash cd ~/ git clone https://github.com/erlerobot/gym-gazebo.git cd gym-gazebo pip3 install -e . ``` 上述命令会下载最新的Gym-Gazebo库到用户的家目录下,并通过Python打包工具执行开发模式下的安装操作,使得任何修改都能立即生效而无需重新安装整个软件包[^1]。 #### 验证安装成果 一旦以上步骤顺利完成,则可以通过启动一个简单的测试场景验证一切正常运作: ```bash python3 -m unittest discover tests/ ``` 如果所有单元测试均能无误通过,则表明Gym-Gazebo已在Ubuntu 20.04环境中成功搭建完毕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值