ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

变色龙

2022-04-05 16:01:10  阅读:163  来源: 互联网

标签:le 颜色 格子 次数 变色龙 方格


题目背景
在一个 N×M 的,每个格子都有一种给定颜色的方格矩阵上,有一只变色龙在第 X 行第 Y 列处,他会在这个方格矩阵上移动。

移动规则如下:

变色龙只能朝相邻于当前方格的一个方格(上下左右)上移动一格,且不能移出边界。

众所周知,变色龙特异的身体会使自己的身体颜色随着环境颜色的变化而变化。所以如果移动到的方格和当前方格的颜色不同,变色龙颜色变化次数会+1,否则颜色变化次数不变。

然而变色龙并不希望能移动的步数最小,它希望颜色的变化次数最小。

它告诉你每个格子的颜色,以及它当前所在的格子,它希望你告诉它从当前格子分别到每个格子的最小颜色变化次数是多少。

输入格式
第一行包括四个正整数N,M,X,Y,描述矩阵大小以及变色龙起点的坐标。

输出格式
N 行每行 M 个非负整数,描述从起点开始出发到每个点的最少颜色变化次数。

样例
input

5 5 3 3
1 1 3 1 1
1 3 3 3 1
3 2 2 2 3
1 4 4 4 6
1 1 1 5 1

output

2 2 1 2 2
2 1 1 1 2
1 0 0 0 1
2 1 1 1 2
2 2 2 2 3

数据范围
时间限制:1s

空间限制:256M

颜色大小在[1,100]中,

测试点编号 N,M范围
1-3 \(1\le N,M\le5\)
4-5 \(1\le N,M\le100\)
6-7 \(1\le N,M\le500\)
8-10 \(1\le N\times M\le 1000000,1\le N,M\le2000\)

直接BFS肯定会超时的,所以我们考虑怎么优化。
一个数由一个点走向另一个点,答案要不会加一,要不不变。我们可以使用01BFS,改用双端队列,如果不变就从前端插入,否则就从后端插入,这样子可以让序列中的数尽量递增,可以达到\(O(n\times m)\)的复杂度。
当然,我们也可以使用最短路的dijkstra算法,改用优先队列,复杂度\(O(n\times mlogn)\)

标签:le,颜色,格子,次数,变色龙,方格
来源: https://www.cnblogs.com/mekoszc/p/16102635.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有