c/c++实现网格最短路径问题

#include<iostream>
#include<stdio.h>
using namespace std;



int MinPath(int a[100][100],int m,int n){
	int dist[m][n],path[m][n],i,j;
	dist[0][0]=a[0][0];path[0][0]=0;
	for(j=1;j<n;j++)
	{
		dist[0][j]=dist[0][j-1]+a[0][j];path[0][j]=1;
	}
	for(i=1;i<m;i++){
		dist[i][0]=dist[i-1][0]+a[i][0];path[i][0]=0;
	}
	for(i=1;i<m;i++)
	for(j=1;j<n;j++)
	if(dist[i-1][j]<dist[i][j-1])
	{
		dist[i][j]=dist[i-1][j]+a[i][j];path[i][j]=0;
	}
		else
	{
	
	dist[i][j]=dist[i][j-1]+a[i][j];path[i][j]=1;
	}
	for(i=m-1,j=n-1;i>0||j>0;)
	{
		cout<<a[i][j]<<"<--";
		if(path[i][j]==0) i--;
		else j--;
	}
	cout<<a[0][0];
	return dist[m-1][n-1]; 
} 

int main(void){
	int arr[100][100];
        int len;int b;
        printf("请输入网格矩阵阶数\n");
        scanf("%d",&len);
        for(int i=0;i<len;i++){
        	for(int j=0;j<len;j++){
			
        printf("前输入矩阵下标为[%d,%d]的值\n",i,j);
           scanf("%d",&b);
           arr[i][j]=b;
        
		}
    }
    printf("你所输入网格的矩阵为:\n");
    for(int k=0;k<len;k++){
    	for(int m=0 ;m<len;m++){
    		printf("%-5d",arr[k][m]);
           if(m==(len-1)) printf("\n");
		}
	}
	printf("最短路径为:\n ");
  int ans=  MinPath(arr,len,len);
    printf("\n路径最小长度是: %d",ans); 
}


 

运行截图

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pofenx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值