矩阵取数问题

给定一个m行n列的矩阵,矩阵每个元素是一个正整数,你现在在左上角(第一行第一列),你需要走到右下角(第m行,第n列),每次只能朝右或者下走到相邻的位置,不能走出矩阵。走过的数的总和作为你的得分,求最大的得分。

public class MatrixMN {
	public static void main(String[] args) throws Exception {
		int row = 5;
		int col = 4;

		int[][] array = new int[row][col];
		for (int i = 0; i < row; i++) {
			for (int j = 0; j < col; j++) {
				array[i][j] = (int) (Math.random() * 10) + 1;
			}
		}

		printMatrix(array);

		System.out.println(test(array,row,col));
	}

	public static int test(int[][] array, int row, int col) {

		int[][] matrix = new int[row+1][col+1];

		// 第一行
		for (int i = 0; i <= col; i++) {
			matrix[0][i] = 0;
		}
		// 第一列
		for (int i = 0; i <= row; i++) {
			matrix[i][0] = 0;
		}

		printMatrix(matrix);
		
		for (int i = 1; i <= row; i++) {
			for (int j = 1; j <= col; j++) {
				int x = array[i-1][j-1]; // 当前位置的值
				
				int left = matrix[i][j - 1]; // 左边的
				int up = matrix[i - 1][j];// 上面的

				matrix[i][j] = Math.max(x+left , x+up);

			}

		}

		// Printing the matrix
		printMatrix(matrix);

		return matrix[row][col];
	}

	private static void printMatrix(int[][] matrix) {
		for (int[] row_val : matrix) {
			for (int val : row_val) {
				System.out.format("%5d", val);
			}
			System.out.println();
		}
		System.out.println();
	}
}

  

 

结果:

    6    3    3    2
    3    1    4    8
    5    8    7    5
    2    3    7   10
    8    5    9    4

    0    0    0    0    0
    0    0    0    0    0
    0    0    0    0    0
    0    0    0    0    0
    0    0    0    0    0
    0    0    0    0    0

    0    0    0    0    0
    0    6    9   12   14
    0    9   10   16   24
    0   14   22   29   34
    0   16   25   36   46
    0   24   30   45   50

50

  

posted @ 2016-05-18 10:55  fyzjhh  阅读(332)  评论(0编辑  收藏  举报