【算法】动态规划之图的最短路径(C++源码)
一、任务描述
请采用动态规划算法编程以求解如下图的最短路径问题:
二、步骤描述
1、标明编号
2、创建数组a存储分条路径的长度,f为每条路径分别的长度,c存储最短的路径位置,最后比较f的大小,输出min和各c的值。
三、运行结果截图
四、源代码(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;
}