【华为校园招聘软件】2022-08-31


【编程题目 | 200分】士兵的任务 [ 2023 校园招聘 考试题 ]


编程题 第2/3题


2.士兵的任务


本题可使用本地IDE编码,不能使用本地已有代码。

无跳出限制,编码后请点击 “保存并提交” 按钮进行代码提交。


解答要求

时间限制:C/C++ 1000ms | 其他语言 2000ms

空间限制:C/C++ 256MB | 其他语言 512MB

64bit IO Format:%lld


题目描述

2、士兵的任务

士兵在迷言中执行任务,迷言中危机重重,他需要在在最短的时间内到达指定的位置。你可以告诉士兵他最少需要多长时间吗?

输入一个n*m的迷言中,迷言中0为路,1为墙,2为超点,3为终点,4为陷阱,6为炸弹。

士兵只能向上下左右四个方向移动,如果路径上为墙,不能移动。已知每走—步需要花费1个单位的时间,走到陷阱上需要花费3个单位的时间,走到炸弹上将会激活炸弹将炸弹上下左右的墙炸为路。

注意点:

1、炸弹只能炸設墙,不会炸掉陷阱
2、炸弹、陷阱只能发挥一次作用
3、迷宫为最大为 25 * 25
4、用例保证士兵一定有方法能到达终点

解答要求

时间限制: C/C++ 6000ms,其他语言:12000ms
内存限制: C/C++ 256MB,其他语言:512MB

输入

第一行:n和m
第二行开始: n *m的短阵

输出

最少需要的单位时间

样例1

输入

4 4
1 1 1 1
1 6 2 1
1 1 0 1
1 3 1 1

样例2

输入

8 4
1 6 2 1
1 1 0 1
1 1 0 1
1 1 0 1
1 1 0 1
1 1 0 1
1 1 0 1
1 1 3 1

输出

7

解释:士兵在位置2,向下移动7步即可到达终点。


代码实现


JAVA


import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {

    Scanner scanner = new Scanner(System.in);
    int n = 0;

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

C++


#include<bits/stdc++.h>

using namespace std;

struct node {
    int x, y, t;

    node() {}

剩余50%内容,订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看