给出一个m*n的矩阵,求左上角到右下角的距离的最小值。

问题描述
这是一个商汤科技笔试题的变形,大致是给出一个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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值