Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定整数矩阵,找出递增1个数的最长连续蛇_Algorithm - Fatal编程技术网

Algorithm 给定整数矩阵,找出递增1个数的最长连续蛇

Algorithm 给定整数矩阵,找出递增1个数的最长连续蛇,algorithm,Algorithm,基本上,你有这样的东西: 0 9 5 3' 4 1 5' 4' 5 7' 6' 9 2 8' 5 10 在这种情况下,最长的蛇是3->4->5->6->7->8。我在这本书的数字后面加上了“数字”,以帮助直观地展示它 您可以水平和垂直移动。矩阵可以是nxm,因此实际上对行和列的数量没有限制 解决这个问题的最佳方法是什么 我考虑过从n/2和m/2位置开始,然后递归地进行广度优先搜索,并跟踪我能找到的最大间隔。我不知道如何最好地解决这个问题。您可以创建一个图,其中节点是矩阵位置,顶点从一个数字N指

基本上,你有这样的东西:

0 9 5 3'
4 1 5' 4'
5 7' 6' 9
2 8' 5 10
在这种情况下,最长的蛇是3->4->5->6->7->8。我在这本书的数字后面加上了“数字”,以帮助直观地展示它

您可以水平和垂直移动。矩阵可以是nxm,因此实际上对行和列的数量没有限制

解决这个问题的最佳方法是什么


我考虑过从n/2和m/2位置开始,然后递归地进行广度优先搜索,并跟踪我能找到的最大间隔。我不知道如何最好地解决这个问题。

您可以创建一个图,其中节点是矩阵位置,顶点从一个数字N指向一个N+1的邻居


一旦建立了图形,您的问题相当于在该图形中查找最长路径之一。

考虑使用“diff(…)”命令获取矩阵中两个相邻数字之间的差值,并检查该差值是否为1。例如,在Python中,这是一个命令()。@denvar虽然在比较并排的元素时肯定会使用“diff(…)”,但它无助于更全面地了解如何以最佳方式遍历矩阵以找到最长的蛇。数字可以在矩阵中重复吗?如上面的示例所示,数字可以在矩阵中出现多次。但是,您不能执行类似于2->3->3->4的操作。它每次都必须增加。我会从DFS开始—从开始节点上下移动—从可以开始DFS的节点集中删除每个访问的节点(因为如果访问了它,它必须已经是蛇的一部分)。在图中查找最长路径并不容易。然而,在DAG中。。。。(详情请参阅:)