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

#include
#include
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); 
}


 

运行截图

c/c++实现网格最短路径问题_第1张图片

你可能感兴趣的:(算法,c++,c语言,算法)