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中。。。。(详情请参阅:)