Java 矩阵中从左到右的最大和
计划规格:Java 矩阵中从左到右的最大和,java,matrix,Java,Matrix,计划规格: 在一个矩阵中,你从最左边列的一个点开始,从那里你可以朝三个方向走:右,右上对角线,右下对角线(即从点(i,j)你可以走到:(i,j+1),(i-1,j+1)(i+1,j+1) 停在矩阵末尾(最右侧) 确定最佳路径,使通过的值之和最高,然后打印最高的和 我的问题是:我为此程序编写了一个方法,但它并不是在所有情况下都返回正确的值。我需要帮助修改我的方法,使其适用于所有情况 这是我的代码: //Matrix size boundaries int x,y; //read x and
- 在一个矩阵中,你从最左边列的一个点开始,从那里你可以朝三个方向走:右,右上对角线,右下对角线(即从点(i,j)你可以走到:(i,j+1),(i-1,j+1)(i+1,j+1)
- 停在矩阵末尾(最右侧)
- 确定最佳路径,使通过的值之和最高,然后打印最高的和
//Matrix size boundaries
int x,y;
//read x and y...
//Matrix M
int[][] M=new int[x][y];
//read M...
//Goes through left-most column and prints highest sum of all sums returned
public void GoThroughLeftColumn()
{
int sum=0;
for(int i=0;i<M.length;i++)
{
sum=Math.max(sum, GoThroughMatrix(i,0));
}
System.out.println(sum);
}
//Returns the highest sum for point (i,j)
public int GoThroughMatrix(int i, int j)
{
int sum;
//if out of matrix-->return 0
if(i>=x||j>=y||i<0||j<0)
{
return 0;
}
else
{
sum=0;
for(int line=-1;line<2;line++)
{
sum=Math.max(M[i][j]+GoThroughMatrix(i+line,j+1), sum);
}
return sum;
}
}
输出为17。这是正确的。
7,2,8是产量最高的路径
对于矩阵:
1 3 4
7 2 1
4 1 8
7 1 8
7 6 7
7 1 3
5 5 4
输出为29。路径7、6、8的正确输出为21。这确实是一个图论问题(尽管也可能有动态规划解决方案)。下面是如何思考图论问题:
Dijkstra的一般解决方案当然适用于您的问题,但您可能可以走一些弯路,因为您知道任何路径中每个节点的索引都等于其列号。因此,您只需沿着每列查找通过该节点的最佳路径,方法是取其三个可能的p中的最大值REDECESSOR(left、upleft、DOWNLEVT),然后在最后一列中取这些值的最大值。这将导致更动态的编程,仅在一个图上。这是一个经典的图论问题:)您需要从左到右的“最昂贵路径”。灵感来源:谢谢,我来看看。在我看来,它更像是一个最大流,而不是单个源的“最大”距离。我正在寻找一种递归方法,以指定的方式遍历矩阵并确定最高和。迪克斯特拉相当复杂。我不得不以某种方式修改我的方法。看起来你实现了一个贪婪算法,它不一定会产生最佳输出。考虑两个数字序列7->7->1和7->6->7。