想象一下一个纵火犯在城镇中走来走去,并按照一种非常特定的方式挑选受害者(或者,想象一下一只蜜蜂在花园里飞来飞去,并按照一种非常特定的方式挑选花朵进行花粉授粉)。假设城镇是一个N×N矩阵,其中N是大于或等于2的整数。纵火犯从左上角开始,依次将房屋M点设置在房屋前方(其中M是他们当前所在房屋的编号),同时按顺序更改每次火灾后房屋的移动方向东⟶南⟶西⟶北⟶东⟶南...依此类推。该摇篮曲纵火犯的价值是使他们离开城镇的M值(即,他们在停止憎恶之前所参观的最后一所房屋)。通过示例更容易理解。以以下矩阵为例:
3 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1
- 我们从左上角开始,所以M = 3(
X
标记纵火犯的当前位置和先前位置):X 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1
- 根据已知顺序,它首先向东移动M(3)个点,并降落在2个点上,因此M相应地发生变化:
X 2 3 X 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1
- 然后它向南走2点,M现在是1:
X 2 3 X 7 3 1 4 1 6 2 5 3 X 1 4 4 3 2 4 1 1 1 1 1
- 现在它向西移动1个点,M变为3:
X 2 3 X 7 3 1 4 1 6 2 5 XX 1 4 4 3 2 4 1 1 1 1 1
- 向北移动3个景点后,就离开了小镇!因此,3是该纵火犯的摇篮曲:
X X 2 3 X 7 3 1 4 1 6 2 5 XX 1 4 4 3 2 4 1 1 1 1 1
给定一个N×N矩阵(您也可以选择将N用作输入),找到纵火犯的摇篮曲。我编写了一个程序,可以使用它生成更多测试用例并可视化纵火犯的路径:在线尝试!
- 您可以假设纵火犯确实有摇篮曲(也就是说,它实际上可以脱离矩阵)。
- 为简单起见,矩阵将仅包含小于或等于9(数字)的正整数。完全欢迎处理任何正整数的解决方案。
- 请注意,纵火犯可以将其降落在已经被烧毁的地方,以防他们搬进来的感觉不同于第一次。在这种情况下,只需获取该元素的值,然后像往常一样再次移动即可。
- 您可以使用任何编程语言进行竞争,并且可以通过任何标准方法接受输入并提供输出,同时请注意,默认情况下会禁止这些漏洞。这是代码高尔夫球,因此每种语言的最短提交(以字节为单位)将获胜。
测试用例
------------- 9 2 3 1 7 2 8 7 6 摇篮曲:9 ------------- 2 1 2 1 3 1 1 2 1 2 2 1 1 1 1 3 摇篮曲:2 ------------- 3 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1 摇篮曲:3 ------------- 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 摇篮曲:2 ------------- 3 2 1 2 1 1 1 2 3 2 3 2 1 1 2 1 1 1 3 1 2 3 1 1 1 1 1 1 4 5 2 3 1 1 1 1 2 1 2 1 2 2 1 2 2 3 2 1 2 摇篮曲:3 -------------
格式不同的矩阵:
[[9,2,3],[1,7,2],[8,7,6]] [[2,1,2,1],[3,1,1,2],[1,2,2,1],[1,1,1,3]] [[3,2,3,2,7],[3,1,4,1,6],[2,5,3,1,1],[4,4,3,2,4],[ 1,1,1,1,1]] [[1、2、1、2、1、2],[1、2、1、2、1、2],[1、2、1、2、1、2],[1、2、1, 2,1,2],[1、2、1、2、1、2],[1、2、1、2、1、2] [[3,2,1,2,1,1,1,1],[2,3,2,3,2,1,1],[2,1,1,1,3,1,2],[ 3,1,1,1,1,1,1,1],[4,5,2,3,1,1,1],[1,2,1,2,1,2,2,2],[1, 2,2,3,2,1,2]]
第五个测试用例的可视化非常有趣。