万马合一之js解答

news2025/1/18 9:02:32

在这里插入图片描述
输入m和n 两个数,m和n表示一个mn 的棋盘。输入棋盘内的数据。棋盘中存在数字和".“两种字符,如果是数字表示Q该位置是一匹马,如果是”."表示该位置为空的,棋盘内的数字表示为该马能走的最大步数。例如棋盘内某个位置一个数字为k,表示该马只能移动1~k步的距离。
棋盘内的马移动类似于中国象棋中的马移动,先在水平或者垂直方向上移动一格,然后再将其移动到对角线位置。棋盘内的马可以移动到同一个位置,同一个位置可以有多匹马。
请问能否将棋盘上所有的马移动到同一个位置,若可以请输入移动的最小步数。若不可以输出0。输入描述
输入m 和n两个数,m和n表示一个m
n的棋盘。输入棋盘内的数据。输出描述
能否将棋盘上所有的马移动到同一个位置,若可以请输入移动的最小步数。若不可以输出0。

该题不考虑绊马脚

在这里插入图片描述

js题解如下

const row = 3, col = 5;
const map = [
    ['4', '7', '.', '4', '8'],
    ['4', '7', '4', '4', '.'],
    ['7', '.', '.', '.', '.'],
]

const directions = [[1, 2], [1, -2], [2, 1], [2, -1], [-1, 2], [-1, -2], [-2, 1], [-2, -1]];


const horsePositionArray = [];  // 有马的点
const horseCouldArrivePositionArray = [];    // 与horsePositionArray一一对应

for (let i = 0; i < row; i++) {
    for (let j = 0; j < col; j++){
        // 计算马可以走到的所有位置
        if (map[i][j] !== '.') {
            // 马的坐标信息
            const horseInfo = {
                row: Number(i),
                col: Number(j),
                steps: Number(map[i][j]),   // 可走步数
            }
            horsePositionArray.push(horseInfo);
            const couldArrivePositions = {}
            BFS(horseInfo.row, horseInfo.col, 0, horseInfo.steps, couldArrivePositions);
            horseCouldArrivePositionArray.push(couldArrivePositions);

        }
    }
}

console.log(horsePositionArray);
console.log(horseCouldArrivePositionArray);

// 所有符合条件的点
const sucessPositions = [];

for (let i = 0; i < row; i++) {
    for (let j = 0; j < col; j++){
        const point = `${i},${j}`;

        // console.log(point);

        // 当前点是否存在于所有马的可达点
        let allInclude = true;
        // 遍历所有点,是否存在于所有马的
        horseCouldArrivePositionArray.forEach(item => {
            // console.log(!!item[point]);
            if (!!item[point]) {
            }
            else {
                allInclude = false;
                return;
            }
        })

        // 如果当前点所有马都可达,则放入
        if (allInclude) {
            sucessPositions.push(point);
        }
    }
}

console.log("所有符合条件的点", sucessPositions);

let minSumSteps = 0;
sucessPositions.forEach(sucessPoint => {
    let sum = 0;
    horseCouldArrivePositionArray.forEach(horseCouldArrivePositions => {
        sum += horseCouldArrivePositions[sucessPoint]
    })
    if (minSumSteps === 0) {
        minSumSteps = sum;
    }
    else if (sum < minSumSteps) {
        minSumSteps = sum;
    }
})
console.log('最终答案: ', minSumSteps - horsePositionArray.length)






// couldArrivePositions为对象, 属性格式为 'x,y': 'usedStep'
function BFS(positionRow, positionCol, usedStep, leftStep, couldArrivePositions) {
    // console.log(positionRow, positionCol, usedStep, leftStep, couldArrivePositions);
    // 判断是否超出边界
    if (positionRow > row - 1 || positionCol > col - 1 || positionRow < 0 || positionCol < 0) {
        return '超出边界';
    }

    // 判断有无剩余步数
    if (leftStep == 0) {
        return couldArrivePositions;
    }

    // 是否走过该点
    if (couldArrivePositions[`${positionRow},${positionCol}`]) {
        // 如果走过, 判断usedStep
        const pastUsedStep = couldArrivePositions[`${positionRow},${positionCol}`];
        // 如果当前步数更少,则更新步数
        if (usedStep + 1 < pastUsedStep) {
            couldArrivePositions[`${positionRow},${positionCol}`] = usedStep + 1;
        }
    }
    // 如果没有走过则直接放入
    else {
        couldArrivePositions[`${positionRow},${positionCol}`] = usedStep + 1;
    }

    // 八个方向发BFS
    for (let i = 0; i < directions.length; i++) {
        BFS(positionRow + directions[i][0], positionCol + directions[i][1], usedStep + 1, leftStep - 1, couldArrivePositions);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1496473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICCV 2023 超分辨率(Super-Resolution)论文汇总

文章目录 图像超分辨率&#xff08;Image Super-Resolution&#xff09; 1、经典图像超分辨率&#xff08;Classical image SR&#xff09; 2、基于参考的图像超分辨率&#xff08;Reference-Based image SR&#xff09; 3、高效&轻量化图像超分辨率&#xff08;Efficient/…

Unity引擎关于APP后台下载支持的实现问题

1&#xff09;Unity引擎关于APP后台下载支持的实现问题 2&#xff09;Prefab对DLL中脚本的引用丢失 3&#xff09;Unity DOTS资源加载问题 4&#xff09;UnitySendMessage和_MultiplyMatrixArrayWithBase4x4_NEON调用导致崩溃 这是第376篇UWA技术知识分享的推送&#xff0c;精选…

Unity背景模糊图片高斯模糊高性能的实现方案

环境&#xff1a; unity2021.3.x 效果&#xff1a; 模糊前&#xff1a; 模糊后&#xff1a; 模糊前&#xff1a; 模糊后&#xff1a; 实现核心思路(shader)&#xff1a; SubShader {CGINCLUDE#include "UnityCG.cginc"sampler2D _MainTex; // 主纹理half4 _MainTe…

CubeMX入门教程(1)——环境搭建

目录 1、为什么要用CubeMX&#xff1f; 2、如何安装CubeMX? 3、HAL固件库的安装 1、为什么要用CubeMX&#xff1f; STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具&#xff0c;目的就是为了方便开发者&#xff0c; 允许用户使用图形化向导生成C …

BUUCTF---[极客大挑战 2019]BabySQL1

1.这道题和之前做的几道题是相似的&#xff0c;这道题考的知识点更多。难度也比之前的大一些 2.尝试万能密码 or 1#发现过滤了or,使用1和1,发现他对单引号也进行了过滤。于是我尝试进行双写绕过&#xff0c;发现可以通过了。 3.由之前的做题经验可知&#xff0c;这道题会涉及到…

wps没保存关闭了怎么恢复数据?恢复文件教程

Microsoft Word是我们不可或缺的工具。很多小伙伴都遇到在WPS中编辑文件时&#xff0c;它可能会突然闪退&#xff0c;或者忘记及时保存文件就直接关闭了&#xff0c;导致我们辛苦编辑的文档丢失。面对这种情况我们该如何应对&#xff0c;尽量减小损失呢&#xff1f;接下来让我为…

Java - Spring MVC 实现跨域资源 CORS 请求

据我所知道的是有三种方式&#xff1a;Tomcat 配置、拦截器设置响应头和使用 Spring MVC 4.2。 设置 Tomcat 这种方式就是引用别人封装好的两个 jar 包&#xff0c;配置一下web.xml就行了。我也并不推荐&#xff0c;这里放两个我在网上找到的配置相关文章&#xff0c;感兴趣可…

遥感分析时什么情况下需要做大气校正?

经常会遇到这样的问题&#xff1a;什么情况需要做大气校正产生&#xff1f;这个问题取决于传感器和应用目标&#xff0c;总的来说&#xff0c;如果要做光谱分析&#xff0c;那么大气校正是必须要做的。本文对于在什么情况下选择什么样的大气校正方法&#xff0c;给出了一些依据…

(3)(3.3) MAVLink高延迟协议

文章目录 前言 1 配置 2 说明 3 消息说明 前言 ArduPilot 支持 MAVLink 高延迟协议(MAVLink High Latency)。该协议专为卫星或 LoRA 等低带宽或高成本链路而设计。 在此协议中&#xff0c;每 5s 只发送一次 HIGH_LATENCY2 MAVLink 信息。对 MAVLink 命令或请求&#xff08…

今日头条 _signature逆向分析

声明&#xff1a;本文仅作学习交流&#xff0c;请遵守法律法规&#xff0c;不要恶意爬取网站。 网址&#xff1a;aHR0cHM6Ly93d3cudG91dGlhby5jb20v 接口&#xff1a;aHR0cHM6Ly93d3cudG91dGlhby5jb20vaG90LWV2ZW50L2hvdC1ib2FyZC8 本文提到的接口是头条的今日热榜接口&…

linux安装ngnix

一、将nginx-1.20.1.tar.gz上传至linux服务器目录下 二、将nginx安装包解压到/usr/local目录下 tar -zxvf /home/local/nginx-1.20.1.tar.gz -C /usr/local/三、预先安装依赖 yum -y install pcre-devel yum -y install openssl openssl-devel yum -y install gcc gcc-c auto…

m4a是什么文件格式?音质是无损吗?

m4a文件格式作为一种音频文件格式&#xff0c;源于MPEG-4标准的制定&#xff0c;该标准致力于提供高效的多媒体编解码方案。通常使用AAC编码&#xff0c;可以提供高质量的音频&#xff0c;但不是无损格式。AAC是一种有损压缩格式&#xff0c;它能够在减小文件大小的同时保持相对…

使用paypal撸BLIZZARDENT 暴雪

在Fomepay平台可以使用493193的卡绑定PayPal来支付暴雪以及退款&#xff0c;有需要的小伙伴可以提取 点击进入Fomepay官方平台获取493193卡 只要对方退款&#xff0c;卡里面有钱我们就可以提取出来&#xff0c;当天处理 开卡步骤如下

laravel-admin 头部添加操作

新建html 样式及js namespace App\Admin\Extensions\Nav;class Links {public function __toString(){return <<<HTML<li><a href"" οnclick"js_method();return false;"><i class"fa fa-floppy-o"></i><s…

【C++】学习记录

一、第一个C程序 #include<iostream> using namespace std;int main() {cout << "Hello World!";return 0; } 二、数据类型、变量与常量、运算符 2.1 数据类型 2.2 变量与常量 2.3 运算符 三 、判断语句&#xff08;if-else、switch-case&#xff09; …

芯片财务管理ERP:主要功能与内容科普

随着科技的飞速发展&#xff0c;芯片产业作为现代信息技术的核心&#xff0c;对财务管理的要求也越来越高。为满足这一需求&#xff0c;芯片企业纷纷采用财务管理ERP(企业资源规划)系统&#xff0c;以提升财务管理效率和准确性。那么&#xff0c;芯片财务管理ERP究竟具备哪些主…

你不得不知道的Python AI库

Python是人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;领域中使用最广泛的编程语言之一&#xff0c;拥有丰富的库支持各种AI和ML任务。本文介绍一些经典的Python AI库。 1. NumPy 简介&#xff1a;NumPy&#xff08;Numerical Python&#xff09;…

python词嵌入

一、词嵌入的概念 自然语言处理的突破在2023年震撼世界&#xff0c;chatgpt3出来&#xff0c;之后chatgpt4、Gemini、Claude3等出来&#xff0c;问答越来越智能&#xff0c;非常厉害&#xff0c;其中有个基础性的概念&#xff0c;计算机要如何理解语言&#xff0c;基础工作就在…

.NET项目定时任务部署到IIS停止问题

项目场景&#xff1a; 在.Net开发中定时任务我一般都是写在Windows服务中跑&#xff0c;但这次项目组要求直接将定时任务写到web项目中。 问题描述 把定时任务的项目部署到IIS后&#xff0c;定时任务总是无缘无故挂掉。 原因分析&#xff1a; 最后发现是IIS应用程序池的回收…

uniapp直接连接wifi(含有ios和安卓的注意事项)

前言 小程序中直接连接wifi-----微信小程序 代码 启动 //启动wifistartWifi() {return new Promise((resolve, reject) > {uni.startWifi({success: (res) > {console.log(启动wifi 成功, res)resolve(true)},fail: (err) > {console.error(启动wifi 失败, err)uni.s…