问题描述
这是一个商汤科技笔试题的变形,大致是给出一个m*n的矩阵,矩阵里的数代表其他相邻格到此格的距离,且只能向右和向下走,求左上角到右下角的距离的最小值。
例:
0 1 9
3 5 2
6 8 7
这个例子的最短距离是0-1-5-2-7,结果是15。
这个真的是想了一天,然后同学说用树做,我试了一下递归,没想到好像结果是正确的,真是意外,代码不长但是理解起来有点点难度(毕竟自己不常用递归)
class Distance{
int[][] mynum;
int x,y;
public Distance(int[][] mynum,int x,int y){
this.mynum = mynum;
this.x = x;
this.y = y; //传入矩阵和矩阵大小的x,y值
}
public int Minnumber(int xx,int yy){
int minright;
//定义minright为当前格到右下角格的最短距离
int minbottom;
//定义minright为当前格到右下角格的最短距离
if(xx == x-1&&yy == y-1)
return mynum[x-1][y-1];
//如果已经是右下角格,则返回该格的值
else if(xx == x-1)
return Minnumber(xx,yy+1) + mynum[xx][yy];
//否则,如果是最底一排格,返回该格的值与下一格到右下角格最短值之和
else if(yy==y-1)
return Minnumber(xx+1,yy) + mynum[xx][y