0
点赞
收藏
分享

微信扫一扫

【算法】动态规划之图的最短路径(C++源码)


【算法】动态规划之图的最短路径(C++源码)

  • ​​一、任务描述​​
  • ​​二、步骤描述​​
  • ​​三、运行结果截图​​
  • ​​四、源代码(C++)​​

一、任务描述

请采用动态规划算法编程以求解如下图的最短路径问题:

【算法】动态规划之图的最短路径(C++源码)_c++

二、步骤描述

1、标明编号
2、创建数组a存储分条路径的长度,f为每条路径分别的长度,c存储最短的路径位置,最后比较f的大小,输出min和各c的值。

【算法】动态规划之图的最短路径(C++源码)_算法_02

三、运行结果截图

【算法】动态规划之图的最短路径(C++源码)_最短路径_03

四、源代码(C++)

#include <iostream>

using namespace std;

#define INF 0x3f3f3f3f

int main()
{
int n,a[105][105],c[105]={0};
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
int f[105]={INF};
f[n]=0;
for(int i=n-1;i>=1;i--)
{
int mins=INF,k=0;
for(int j=1;j<=n;j++)
{
if(a[i][j]!=0&&a[i][j]!=INF)
{
f[i]=f[j]+a[i][j];
if(f[i]<mins)
{
k=j;
}
c[i]=k;
mins=min(f[i],mins);
}
}
f[i]=mins;
}
cout<<"The shortest path is : "<<f[1]<<endl;
int x=c[1];
while(x)
{
cout<<" "<<x<<" ";
x=c[x];
}
cout<<endl;
return 0;
}


举报

相关推荐

0 条评论