AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3809. 加密算法

中等通过率 48% · 提交 899 · 通过 430
回溯DFS字符串矩阵

小慕正在开发一套加密系统。明文是一段由数字0-9组成的数字串,通过一个特殊的密码本查找转换,生成另一段密文数字串。规则如下: 1. 明文为一段数字串,由0-9组成。 2. 密码本为数字0-9组成的二维数组。 3. 需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由数字组成,上下和左右是相邻的,注意:对角线不相邻,。 4. 每一位明文对应密文即为密码本中找到的单元格所在的行和列序号(序号从0开始)组成的两个数字。如明文第i位Data[i]对应密码本单元格为Book[X][Y],则明文第i位对应的密文为X Y,X和Y之间用空格隔开。 如果有多条密文,返回。如果密码本无法匹配,返回"error"。 请你帮小慕设计这个加密程序。

提示:带虚线的词点一下有通俗解释。

输入描述

<p> 第一行输入1个正整数N,代表明文的长度(1 <= N <= 9) </p> <p> 第二行输入N个明文数字组成的序列Data[i](整数,0 <= Data[i] <= 9) </p> <p> 第三行输入1个正整数M,(1 <= M <= 9) </p> <p> 接下来输入一个M*M的矩阵代表密码本Book[i][i],(整数,0 <= Book[i][i] <= 9) </p>

输出描述

如明文 第i位Data[i]对应密码本单元格为Book[i][j],则明文第i位对应的密文为X Y,X和Y之间用空格隔开。如果有多条密文,返回字符序最小的密文。如果密码本无法匹配,返回"error"。

示例

示例 1

输入

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

输出

0 0 0 1 0 2 0 3

示例 2

输入

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

输出

0 1 1 1

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
0 0 2 1 3 4 6 6 4 0 1 2 0 1 2 明文: "3" 在密码本中找到 数字3位于(1,1) 密文: "1 1" 相邻:上下左右,不能斜角,不能重复使用格子 多条路径时,选密文字符串最小的
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「加密算法」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。