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

这篇博客讨论了一个改编自商汤科技笔试题的问题,即在给定的m*n矩阵中,从左上角到右下角的最短路径。矩阵中的数字表示相邻格子之间的距离,只能向右或向下移动。通过提供一个例子,展示了最短距离为15的路径。博主尝试使用递归解决这个问题,并成功得出正确结果,虽然递归解法理解起来有些挑战性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述
这是一个商汤科技笔试题的变形,大致是给出一个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][yy];
		//否则,如果是最右一排格,返回该格的值与下一格到右下角格最短值之和
	else
	{
    minright = Minnumber(xx+1,yy) + mynum[xx][yy];
    //计算右一格到右下角格的最小距离
    minbottom = Minnumber(xx,yy+1) + mynum[xx][yy];
    //计算下一格到右下角格的最
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值