[Nowcoder

2023-11-12

题目描述

There’s a new art installation in town, and it inspires you… to play a childish game. The art installation consists of a floor with an n×n matrix of square tiles. Each tile holds a single number from 1 to k. You want to play hopscotch on it. You want to start on some tile numbered 1, then hop to some tile numbered 2, then 3, and so on, until you reach some tile numbered k. You are a good hopper, so you can hop any required distance. You visit exactly one tile of each number from 1 to k. What’s the shortest possible total distance over a complete game of Hopscotch? Use the Manhattan distance: the distance between the tile at (x1 , y1 ) and the tile at (x2 , y2 ) is |x1 − x2 | + |y1 − y2|.

输入

The first line of input contains two space-separated integers n (1 ≤ n ≤ 50) and k (1 ≤ k ≤ n2 ),where the art installation consists of an n×n matrix with tiles having numbers from 1 to k.
Each of the next n lines contains n space-separated integers x (1 ≤ x ≤ k). This is the art nstallation.

输出

Output a single integer, which is the total length of the shortest path starting from some 1 tile and ending at some k tile, or −1 if it isn’t possible.

样例输入

【样例1】

10 5
5 1 3 4 2 4 2 1 2 1
4 5 3 4 1 5 3 1 1 4
4 2 4 1 5 4 5 2 4 1
5 2 1 5 5 3 5 2 3 2
5 5 2 3 2 3 1 5 5 5
3 4 2 4 2 2 4 4 2 3
1 5 1 1 2 5 4 1 5 3
2 2 4 1 2 5 1 4 3 5
5 3 2 1 4 3 5 2 3 1
3 4 2 5 2 5 3 4 4 2

【样例2】

10 5
5 1 5 4 1 2 2 4 5 2
4 2 1 4 1 1 1 5 2 5
2 2 4 4 4 2 4 5 5 4
2 4 4 5 5 5 2 5 5 2
2 2 4 4 4 5 4 2 4 4
5 2 5 5 4 1 2 4 4 4
4 2 1 2 4 4 1 2 4 5
1 2 1 1 2 4 4 1 4 5
2 1 2 5 5 4 5 2 1 1
1 1 2 4 5 5 5 5 5 5

样例输出

【样例1】

5

【样例2】

-1

题意:
给出一个矩阵 n ∗ n n * n nn,然后一个值k ≤ \leq n2 ,对于每一个数字i ,可以到达值为i+1的任意位置(i >= 1 && i <= k-1)
问从1->k的最短距离是多少,两个位置的距离为曼哈顿距离
思路:
这个题用bfs是可以的,简单建个图跑一个最短路也好

spfa:

int n,m;
typedef pair<int,int> PII;
vector<PII> a[2507];
ll siz[maxn];
ll pre[maxn];
ll cnt,head[maxn];
ll dis[maxn];
bool vis[maxn];
struct node {
    int u,v,nex;
    int w;
} e[maxn << 1];
void init() {
    cnt = 0;
    Clear(head,-1);
    Clear(dis,0x3f3f3f3f);
}
void add(int u,int v,int w) {
    e[cnt].u = u;
    e[cnt].v = v;
    e[cnt].w = w;
    e[cnt].nex = head[u];
    head[u] = cnt ++;
}
void spfa(int x) {
    queue<int> que;
    que.push(x);
    vis[x] = 1;
    dis[x] = 0;/// visit the pnt
    while(que.size()) {
        int u = que.front();
        que.pop();
        vis[u] = false;
        for(int i=head[u]; ~i; i = e[i].nex) {
            int v = e[i].v;
            if(dis[v] > dis[u] + e[i].w) {
                dis[v] = dis[u] + e[i].w;
                if(vis[v] == 0) {
                    vis[v] = 1;
                    que.push(v);
                }
            }
        }
    }
}
int main() {
    n = read,m = read;
    init();
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=n; j++) {
            int x = read;
            a[x].push_back({i,j});
        }
    }
     
    for(int i=1; i<=m; i++) {
        siz[i] = a[i].size();
        pre[i] = pre[i-1] + siz[i];
    }
 
    for(int i=1; i<m; i++) {
        int sizi = a[i].size();
        int sizj = a[i+1].size();
        for(int ii = 0; ii < sizi; ii ++) {
            int idi = pre[i-1] + ii + 1;
            for(int jj = 0; jj<sizj; jj++) {
                int idj = pre[i] + jj + 1;
                int dis = abs(a[i][ii].first - a[i+1][jj].first) + abs(a[i][ii].second - a[i+1][jj].second);
                add(idi,idj,dis);
            }
        }
    }
    ll ans = 0x3f3f3f3f;
    for(int i=0; i<a[1].size(); i++) {
        Clear(dis,0x3f3f3f3f);
        Clear(vis,0);
        spfa(i+1);
        for(int j=pre[m-1]+1; j<=pre[m]; j++) ans = min(ans,dis[j]);
    }
    if(ans >= 0x3f3f3f3f) puts("-1");
    else cout << ans << endl;
    return 0;
}
/**
10 5
5 1 3 4 2 4 2 1 2 1
4 5 3 4 1 5 3 1 1 4
4 2 4 1 5 4 5 2 4 1
5 2 1 5 5 3 5 2 3 2
5 5 2 3 2 3 1 5 5 5
3 4 2 4 2 2 4 4 2 3
1 5 1 1 2 5 4 1 5 3
2 2 4 1 2 5 1 4 3 5
5 3 2 1 4 3 5 2 3 1
3 4 2 5 2 5 3 4 4 2
 
**/
 
 
/**************************************************************
    Problem: 18787
    Language: C++
    Result: 正确
    Time:905 ms
    Memory:65716 kb
****************************************************************/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Nowcoder 的相关文章

  • ES6 Symbol

    概览 const mySymbol Symbol mySymbol console log mySymbol Symbol mySymbol console log mySymbol Symbol mySymbol false consol
  • 收藏!生物信息学数据库大全,全网最全收集整理!

    综合数据库 INSD 国际核酸序列数据库 International Nucleotide Sequence Databank 由日本的DDBJ 欧洲的EMBL和美国的GenBank三家各自建立和共同维护 EMBL库 欧洲分子生物学实验室的

随机推荐

  • MySQL 全面知识总结

    基础 Mysql存储特点 Mysql存储数据以数据页为最小单位 在同一个数据页中 数据按照主键 连续存储 如果没有主键 则按照Mysql维护的 ROW ID 来连续存储 数据页和数据页之间以双向链表关联 数据和数据之间以单向链表关联 SQL
  • Go基础(复杂类型):结构体

    结构体 一个结构体 struct 就是一个字段的集合 而 type 的含义跟其字面意思相符 下面来写一个简单的例子 package main import fmt 一个结构体就是一个字段的集合 type Vertex struct X in
  • MATLAB机器人工具箱1-位姿描述及轨迹

    1 位姿描述 1 1 二维空间位姿描述 开启机器人工具箱 startup rvc 代码 clc clear 开启机器人工具箱 startup rvc 二维平面内的位姿描述 T1 SE2 1 2 30 pi 180 建立齐次坐标变换 代表 1
  • SSM毕业设计分享 疫情防控物业管理系统

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 开发环境 3 3 系统结构设计 4 项目获取 1 项目简介 Hi 各位同学好呀 这里是M学姐 今天向大家分享一个今年 2022 最新完成的毕业设计项
  • C++ 函数重载(多态)、函数模板

    内容均出自 C primer plus 本文仅为个人理解总结所用 若有不明欢迎站内私信交流 若发现文中错漏之处 期待不吝赐教站内私信 一 函数重载 多态 先上定义 C Premer Plus page276 函数多态是C 在C语言的基础上新
  • iOS平台Socket编程实践(一)

    iOS平台Socket编程实践 关于TCP Socket编程基础可以参看我的 我所不知道的TCP Socket编程 系列文章 iOS平台Socket编程主要内容及辅助工具 1 TCP协议编程 2 UDP协议编程 3 WireShark抓包辅
  • QT5.15.2安装教程

    QT属于开源项目 从QT5 15开始都统一为下载器在线安装的方式 安装较为简单 1 下载好在线下载器 QT对5 15以及以上版本已经停止提供离线安装包 但是 5 15以及以上版本都支持在线安装 清华镜像 Qt5 15及其以上版本在https
  • DCIC2021学习笔记 - TASK 2 结果提升

    采用建议库函数结果为17 4530 经过KNN结果为17 51 提升不大 尝试调研滴滴出行调度方案后修改结果 To Do List 调研论文 OM 滴滴 在线司机调度系统的实践研究 OM 北邮X滴滴 基于最小车队的动态车辆调度
  • 超实用的Mac风扇控制系统:Macs Fan Control Pro mac中文版

    Macs Fan Control Pro Mac中文激活版是专为mac用户开发的一款Mac风扇控制系统 用户可以监控电脑中的显卡温度 以及风扇等等 可以帮你解决mac风扇噪音问题 解决mac发热问题 而且支持自定义风扇转速策略设置 非常好用
  • 面试准备计划

    C 知识点 基本概念 关键字 函数底层实现 Linux 指令 makefile c make 数据库 SQL 基本语法 存储过程 触发器 事务 索引等底层实现 存储引擎 非关系型数据库redis mapreduce HDFS 操作系统 进程
  • 从零开始搭建自己的VueJS2.0+ElementUI单页面网站(一、环境搭建)

    前言 VueJS可以说是近些年来最火的前端框架之一 越来越多的网站开始使用vuejs作为前端框架 vuejs轻量 简单的特性使得前端开发变得更加简易 而基于vuejs的前端组件库也越来越多 我们今天使用的ElementUI 是饿了么团队开发
  • select下拉列表级联

    原文地址 http blog csdn net symgdwyh article details 5432582
  • Python学习(十)之数字(Number)、字符串(String)

    文章目录 一 Python3 数字 1 整型的不同进制 2 数据类型的转换 3 数字运算 4 数学函数 5 随机数函数 6 三角函数 7 数字常量 二 Python3 字符串 1 对字符串的访问 2 字符串运算符 3 转义字符 4 字符串格
  • GLP(Grafna +Loki +Promtail)日志可视化企业级实战

    文章目录 1 效果展示 Loki 指标展示 日志展示 内存分析案例 业务请求量分析统计 自由探索日志 0 简介 grafana学习 自定义查询按钮 为什么不是ELK ELK Loki 1 loki聚合组件 架构
  • phpstudy2016 RCE漏洞验证

    文章目录 漏洞描述 漏洞验证 漏洞描述 PHPStudyRCE Remote Code Execution 也称为phpstudy backdoor漏洞 是指PHPStudy软件中存在的一个远程代码执行漏洞 漏洞验证 打开phpstudy2
  • 小熊个人资料_抖音网红熊董事长个人资料,美迪智董事长张曼如信息介绍

    想必大家最近都被抖音上面一只勤勤恳恳发传单的熊给刷屏了吧 广州那么热的天别说女孩子穿着那么厚的衣服满街跑 就连男生也不行啊 毕竟那个衣服里面是不透气的 最开始大家是被这个网红熊的坚持感动到了 后来才知道发传单的只是一个20岁的女生 后来大家
  • Promise原理

    一 Promise与异步的关系 之前做练习遇到Promise与SetTimeout的混合使用 自己发现对于Promise的理解不够彻底 所以今天就来看看这方面的问题 首先Promise的主要作用是能够处理异步问题 那么什么是异步呢 与它相反
  • <li>标签获取选中的值

    ul class payType li class selected 支付宝付款 li li 货到付款 li ul window nl ad function 获取id为zhifubao下边所有li标签 var fukuan documen
  • 【k8s故障处理篇】kubernetes集群中工作节点Noready故障处理

    k8s故障处理篇 kubernetes集群中工作节点Noready故障处理 一 查看故障情况 二 检查master节点系统pod是否运行正常 三 在master节点检查node02节点详细信息 四 检查node02节点日志 五 最终解决方法
  • [Nowcoder

    题目描述 There s a new art installation in town and it inspires you to play a childish game The art installation consists of