求A到E最小投资:
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
void main ()
{
char Str[5] = {'E', 'D', 'C', 'B', 'A'};
double d[4][7] = {{3, 8, 7},
{4, 2, 3, 8, 7, 4, 7},
{10, 13, 12, 5, 6, 7, 8},
{9, 5, 10, 10, 8, 15, 7}},//投资
f[4][3] = {{3, 8, 7},0},//投资叠加
temp_f;//中间数
int S[4][3] = {0};//存储路线
for(int k = 1; k<4; k++) //阶段循环,从第二阶段开始
{
for(int i = 0; i<3; i++)//状态循环
{
f[k][i] = 100;//大化
for(int j = 0; j< 2; j++)
{
if((i==0&&j==2)||(i==2&&j==0)) continue;
temp_f = f[k-1][j] + d[k][j+2*i];//最小路线累加
if(temp_f< f[k][i])
{
f[k][i] = temp_f;
S[k][i] = j;
}
}
}
if(k==3)
{
int j = 0;
for(int i = 1; i<3; i++)
if(f[k][i]<f[k][j]) j = i;
cout<<"最小投资为:"<<f[k][j]<<endl<<"投资路线为:";
for(int i = 0; i<4; i++)
{
cout<<setw(5)<<Str[i]<<j +1;
j = S[3 - i][j];
}
cout<<setw(5)<<Str[4]<<endl;
}
}
cin>>temp_f;//控制台停留
}