问题描述
最短路径问题(Shortest path problem):再不回退的前提下,找到A到F的最短路径
算法分析:
//倒推法
#include<bits/stdc++.h>
using namespace std;
int main()
{
long n,i,j,x,f[100],c[100],a[100][100];
memset(a,0,sizeof(a));
memset(c,0,sizeof(c));
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
f[i]=2100000000;//初始化,默认为每一个城市到达终点的距离
f[n]=0;
for(i=n-1;i>=1;i--)
for(x=i+1;x<=n;x++)
if(a[i][x]>0&&(f[x]!=2100000000&&f[i]>a[i][x]+f[x]))
{
f[i]=a[i][x]+f[x];
c[i]=x;
}
cout<<f[1]<<endl;
x=1;
while(x!=0)
{
cout<<x<<" ";
x=c[x];
}
cout<<endl;
}
/*
0 5 3 0 0 0 0 0 0 0 0
5 0 0 1 5 3 0 0 0 0 0
3 0 0 0 8 0 4 0 0 0 0
0 1 0 0 0 0 0 5 6 0 0
0 6 8 0 0 0 0 5 6 0 0
0 3 0 0 0 0 0 0 0 8 0
0 0 4 0 0 0 0 0 0 3 0
0 0 0 5 5 0 0 0 0 0 3
0 0 0 6 0 0 0 0 0 0 4
0 0 0 0 0 8 3 0 0 0 3
0 0 0 0 0 0 0 3 4 3 0
*/