下面是一个问题陈述:
有一个大小为 m*n 的矩阵,从 1 到 m*n的所有数字都在其中占据一个位置。现在,一个元素被称为特殊 if(递归定义)
-it is the top left corner element(at position (0,0))
-an element at (x,y) is special if its neighbour is an element (m,n) such that (m,n) is
special and the element at (x,y) is greater than the element at(m,n) and all of the (m,n)'s neighbours.
小区的邻居是与其共享边的小区。因此,内部单元格有 4 个邻居,边缘单元格有 3 个邻居,角落单元格有 2 个邻居。
问题表明矩阵中只有少数(可能是 0)个单元格已被填充。其余部分的填充方式是使用从 1 到 m*n 的所有数字,并且我们最大化特殊元素的数量。此外,如果可能有多个答案,则字典上最小的矩阵将被视为答案。
如果矩阵的行主视图的字符串在字典上小于另一个,则矩阵在字典上小于另一个。
Test case 1: //2 X 3 matrix
2 ? ?
? ? 3
Solution 1:
2 1 4
5 6 3
Test case 2: //6 X 6 matrix
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
? ? ? ? ? ?
Solution 2:
1 2 3 13 14 15
4 6 8 10 11 16
5 7 9 12 19 17
28 26 24 22 20 18
29 27 25 23 21 36
30 31 32 33 34 35
我的逻辑: 矩阵中的特殊元素总是连续的。因此,我们必须找出通过连接连续的特殊元素形成的最长路径。此外,在将元素放置在特殊元素(m,n)的相邻单元格(x,y)之前,我们首先填写特殊元素(m,n)的所有邻居(除了(x,y))和然后选择一个大于所有这些的值来填充 (x,y)。
我不知道如何继续前进以及如何包含字典最小的条件。请帮忙。
提前致谢。