动态规划法——多段图的最短路径

目录

动态规划法的基本思想

多段图的基本想法

代码块(Java)

运行结果


动态规划法的基本思想:

  1. 将大问题划分成若干个小问题进行解决,从而一步步获取最优解
  2. 动归从上到下分析问题,从下到上解决问题
  3. 动归与分治法相似,其基本思路都是将待求问题分解成若干个子问题,先求解子问题,再从子问题中找到原问题的解
  4. 动归与分治法不同之处:动归的子问题不是相互独立的,他们之间往往存在依赖关系,而分治法的子问题都是相互独立的

动态规划法——多段图的最短路径_第1张图片

 

多段图的基本想法:

从源点出发,找出一条到达终点时权值最小的路径
动态规划法——多段图的最短路径_第2张图片

下标

1

2

3

4

5

6

7

8

9

元素值

4

2

3

8

7

10

13

13

16

状态转移

0->1

0->2

0->3

2->4

3->5

2->6

4->7

5->8

8->9

代码块(Java):

const int MAX=1000;  //假定边上的权值最大不超过1000
#define N 10 
int arc[10][10] 
int CreatGraph() 
{//创建图
int i,j,k;
int weight; //权值
int vnum,arcnum;  //vnum为顶点个数,arcnum为边数
cout<<"请输入顶点的个数和边数:";
cin>>vnum>>arcnum;
for(i=0;i>i>>j>>weight;
arc[i][j]=weight; //有边,填入权值
}
cout<<"已初始化完多段图!";
return vnum; //返回顶点个数
}
int BackPath(int n) {
   int i,j,temp;
   int cost[N],path[N]; //cost数组存储路径长度,path存储路径
   for(i=1;i=0;i--) { //i是j的前驱,考察所有入边
			if(arc[i][j]+cost[i]=0) { //依次输出path[i],path[i]<0说明已到达多段图的起点
       cout<<"<-"<

运行结果:

动态规划法——多段图的最短路径_第3张图片

 

你可能感兴趣的:(动态规划,算法,数据结构,java)