C++课后习题训练记录Day203

1.练习项目 :

问题描述

小蓝有一天误入了一个混境之地。

好消息是:他误打误撞拿到了一张地图,并从中获取到以下信息:

  1. 混境之地是一个 n⋅m 大小的矩阵,其中 # 表示墙,无法通行, . 表示普通的道路, k 表示散落在地图中的钥匙。
  2. 他现在所在位置的坐标为 (A,B) ,而这个混境之地出口的坐标为 (C,D) ,当站在出口时且携带最少一把钥匙即表示可以逃离混境之地。
  3. 地图中可能存在不止一把钥匙。

坏消息是:

  1. 地图中可能没有钥匙。

小蓝可以往上下左右四个方向行走,每走一步耗时一分钟。

小蓝想知道他能否逃离这个混境之地,如果可以逃离这里,输出最少需要消耗多少时间 ,反之输出 -1 。

输入格式

第一行输入两个正整数 n,m ,表示矩阵的大小。

第二行输入四个正整数 A,B,C,D ,表示小蓝当前所在位置的坐标,以及混境之地出口的坐标。

接下来输入 n 行,每行 m 个字符,表示混境之地的地图,其中 # 表示墙,无法通行, . 表示普通的道路, k 表示散落在地图中的钥匙。

输出格式

输出数据共一行一个字符串:

  • 若小蓝可以逃离混境之地,则输出最少需要消耗多少时间 。
  • 若小蓝无法逃离混境之地,则输出 -1 。

2.选择课程

在蓝桥云课中选择题库,选择题号5000并开始练习。

3.开始练习

(1)源码 :

#include<bits/stdc++.h>

using namespace std;

const int N=1e3+10;

char mpNN;

int disbNN,diseNN;

int dx\[\]={1,-1,0,0};

int dy\[\]={0,0,1,-1};

vector<pair<int,int>>v;

int n,m,a,b,c,d,e;

void bfs(int x,int y,int dis\[\]N)

{

disxy=0;

queue<pair<int,int>>q;

q.push({x,y});

while(q.size()){

pair<int,int>h=q.front();

q.pop();

for(int i=0;i<4;i++){

int px=h.first,py=h.second;

int nx=px+dxi,ny=py+dyi;

if(nx<1||ny<1||nx>n||ny>m)continue;

if(mpnxny=='#')continue;

if(disnxny>dispxpy+1){

q.push({nx,ny});

disnxny=dispxpy+1;

}

}

}

}

int main()

{

ios::sync_with_stdio(0),cin.tie(0),cout.tie();

cin>>n>>m;

cin>>a>>b>>c>>d;

int tag=0;

for(int i=1;i<=n;i++){

for(int j=1;j<=m;j++){

cin>>mpij;

if(mpij=='k')tag=1;

}

}

if(!tag){

cout<<-1<<'\n';

return 0;

}

memset(disb,0x3f3f3f3f,sizeof(disb));

memset(dise,0x3f3f3f3f,sizeof(dise));

bfs(a,b,disb),bfs(c,d,dise);

int step=0x3f3f3f3f;

for(int i=1;i<=n;i++){

for(int j=1;j<=m;j++){

if(disbij=='k')

step=min(step,disbij+diseij);

}

}

if(step==0x3f3f3f3f)cout<<-1<<'\n';

else cout<<step<<'\n';

return 0;

}

(2)检验结果

对此代码进行检验,检验后无报错,运行此代码,运行结果正确。

(3)练习心得:

注意每段代码末尾的分号是否存在 ,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。

相关推荐
夏幻灵1 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码1 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
西飘客2 小时前
vs 怎么根据dll 生成lib文件
c++·qt
bkspiderx3 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆3 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光3 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
码云数智-园园3 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
禾小西4 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨4 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
徐小黑ACG5 小时前
Golang 基础05 结构体struct
开发语言·算法·golang