#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);
}
运行截图