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)练习心得:

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

相关推荐
汉克老师38 分钟前
GESP2026年9月认证C++六级( 第三部分编程题(1、数组划分))精讲
c++·gesp·小学生·学c++编程
千里码aicood1 小时前
基于PLC与机器视觉的智能分拣控制系统设计
c++·自动化·plc
漂流瓶jz1 小时前
UVA-1442 洞穴 题解答案代码 算法竞赛入门经典第二版
c++·算法·题解·aoapc·算法竞赛入门经典·uva
朽棘不雕1 小时前
进一步了解模板
c++
Bruce_Liuxiaowei2 小时前
Python 实例赋值遮蔽类属性:一个从不报错的静默陷阱
开发语言·python·语法糖
aramae4 小时前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他
汉克老师4 小时前
CSP-J 2026 初赛试题解析(第一部分:选择题(8-15))精讲
c++·csp-j·小学生·学c++编程
wabs6665 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
风合星语6 小时前
2026 ROS 2 Lyrical C++ 入门(五):Action 实战——任务反馈、取消与超时处理
c++·机器人·ros2·异步编程·lyrical
91刘仁德7 小时前
C++ 继承和多态 设计模式
c语言·c++·笔记