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

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

相关推荐
zzzll111135 分钟前
LangChain4j:Java 生态的 AI 应用开发利器
java·开发语言·人工智能
Dream Cosmos1 小时前
Linux 多线程——线程互斥:从抢票问题到 Mutex 底层原理
linux·c++
JAI科研1 小时前
Deepseek Agent Harness教程(七) | Deepseek Harness不是一个内核加一堆插件
开发语言·人工智能·深度学习·算法·自然语言处理·transformer·vllm
孙克旭_1 小时前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表
Titan20241 小时前
HTTPS基础知识梳理
服务器·网络·c++·网络协议·学习·http·https
艾莉丝努力练剑1 小时前
【AI大模型接入SDK】SSE协议
c++·学习·面试·大模型·sdk
斑马1391 小时前
Linux软件编程学习笔记(五)——线程
开发语言·php
吴声子夜歌2 小时前
Java——数组和集合(一)
java·开发语言
呆呆敲代码的小Y2 小时前
Lua 上值(UpValue)
开发语言·junit·lua·lua上值·upvalue