计算最小路径

#include<stdio.h>
#define MAXSIZE 0x7fffffff
int zheng(int n)//输出绝对值
{
	if(n<0){
		n=-n;
		return n;
	}
	else{
		return n;
	}
}
bool min_d(int s,int d ,int f)//判断a是不是最小的
{
	if(s<=d&&s<=f)
		return true;
	else 
		return false;
}
int min_lu(int a[],int b[],int c[],int x,int y,int z)//计算最小路径
{
	int i=0,j=0,k=0;
	int d_min=MAXSIZE;
	int d;
	while(i<x&&j<y&&k<z&&d_min>0)	{
				d=zheng(a[i]-b[j])+zheng(b[j]-c[k])+zheng(c[k]-a[i]);
				if(d<d_min)
					d_min=d;
				if(min_d(a[i],b[j],c[k]))
					i++;
				else if(min_d(b[j],c[k],a[i]))
					j++;
				else k++;
	}
	return d_min;
}

int main()
{
	int a[]={-1,0,9};
	int b[]={-25,-10,10,11};
	int c[]={2,9,17,30,41};
	int sa=sizeof(a)/sizeof(a[0]);
	int sb=sizeof(b)/sizeof(b[0]);
	int sc=sizeof(c)/sizeof(c[0]);
	int min=min_lu(a,b,c,sa,sb,sc);
	printf("%d",min);
}

以下是利用动态规划计算最小路径和并记录最小路径索引的C++代码: ```c++ #include <iostream> #include <vector> using namespace std; vector<vector<int>> minPathSum(vector<vector<int>>& grid) { int m = grid.size(); int n = grid[0].size(); vector<vector<int>> dp(m, vector<int>(n, 0)); vector<vector<int>> path(m, vector<int>(n, 0)); // 用于记录最小路径的索引 dp[0][0] = grid[0][0]; // 初始化第一行和第一列 for (int i = 1; i < m; i++) { dp[i][0] = dp[i-1][0] + grid[i][0]; path[i][0] = 1; // 记录路径向下 } for (int j = 1; j < n; j++) { dp[0][j] = dp[0][j-1] + grid[0][j]; path[0][j] = 2; // 记录路径向右 } // 计算剩余部分 for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if (dp[i-1][j] < dp[i][j-1]) { dp[i][j] = dp[i-1][j] + grid[i][j]; path[i][j] = 1; // 记录路径向下 } else { dp[i][j] = dp[i][j-1] + grid[i][j]; path[i][j] = 2; // 记录路径向右 } } } // 输出最小路径 vector<vector<int>> res; int i = m-1, j = n-1; res.push_back({i, j}); while (i != 0 || j != 0) { if (path[i][j] == 1) { // 向下 i--; } else { // 向右 j--; } res.push_back({i, j}); } reverse(res.begin(), res.end()); return res; } int main() { vector<vector<int>> grid = {{1,3,1},{1,5,1},{4,2,1}}; vector<vector<int>> path = minPathSum(grid); for (auto& p : path) { cout << "(" << p[0] << "," << p[1] << ") -> "; } cout << endl; return 0; } ``` 该代码利用动态规划计算最小路径和,并记录了最小路径的索引。其中,`dp[i][j]`表示从左上角到达点`(i,j)`的最小路径和,`path[i][j]`表示从左上角到达点`(i,j)`的最小路径的方向(1表示向下,2表示向右)。最后,根据`path`数组输出最小路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值