问题如下:设有一个旅行者从A点出发,途中要经过B,C,D等处,最后到达E,从A到E有很多条路线可走,各个点的距离如下,问旅行者应该选择哪一条,是使A到E路线最短。
求解算法:
public class Dp{
private int[][] matrix;
private int[] distance;//记录到终点的距离
public int[][] getMatrix(){
return matrix;
}
public void setMatrix(int[][] matrix){
this.matrix = matrix;
}
/**任意两点之间的距离,前提是pointA<pointB
* @param PointA 起点
* @param PointB 终点
*/
public void getMinDistanceBetweenPionts(int pointA,int pointB)
{
//初始化
distance = new int[pointB+1];
for(int i = 0 ;i<distance.length;i++) distance[i]=10000;
distance[pointB] = 0;//该初始化保证(pointB,pointB)的距离为0
; for(int i =pointB ;i>= pointA ;i--){//从最后pointB行开始,递减直到pointA
for(int j = i+1;j <= pointB;j++){//历遍(i,i)->(i,pointB),找到(i,pointB)的最小距离
if( matrix[i][j] != 10000){
int value =0;
if( j+1<= pointB) value = distance[j];
int minDistance = matrix[i][j] +value;//最小路径为(i,j)的距离加(j,point)的距离
if(minDistance <distance[i]) distance[i] = minDistance;//
}
}
}
for(int i: distance)
{
System.out.print(" "+i);
}
System.out.println();
}
public static void main(String args[]){
int m = 10000;
int[][] matrix = {
{m,2,5,3,m,m,m,m,m,m},
{0,m,m,m,7,5,6,m,m,m},
{0,0,m,m,3,4,2,m,m,m},
{0,0,0,m,5,1,5,m,m,m},
{0,0,0,0,m,m,m,1,4,m},
{0,0,0,0,0,m,m,6,3,m},
{0,0,0,0,0,0,m,3,3,m},
{0,0,0,0,0,0,0,m,m,3},
{0,0,0,0,0,0,0,0,m,4},
{0,0,0,0,0,0,0,0,0,m}
};
Dp dp = new Dp();
dp.setMatrix(matrix);
dp.getMinDistanceBetweenPionts(0,9);
}
}
分析:
1、找出状态转移公式;i 到 j 的最短距离等 (i,i+1)的距离 加上 (i+1,j)的最短距离
2、保存每个点到 j 的最短距离的变量 distance[]
这是我的想法,不知道大家有没有更好的算法,能缩短时间,欢迎大家讨论!
- 大小: 20.2 KB
分享到:
相关推荐
JAVA版动态规划解决最短路径问题 啊
通过程序仿真的验证,免疫算法在求解最短路径问题上表现出良好的性能,特别是在解决具有多个目标和约束的复杂问题时,能够提供多解性和鲁棒性。然而,算法也存在一些挑战,如计算复杂度高、收敛速度慢等问题,这需要...
【路径规划】基于蚁群算法求解最短路径matlab
在压缩包中的“ych1.caj”文件,很可能是遗传算法求解最短路径问题的具体实现代码。通过阅读和分析这个文件,我们可以更深入地理解算法的细节,包括如何定义个体、适应度函数、交叉和变异操作的具体实现,以及如何...
总之,"基于MATLAB的模拟退火算法求解最短路径"是一个结合了理论与实践的优秀项目,它不仅展示了模拟退火算法解决最优化问题的能力,还体现了MATLAB在实现此类算法上的便利性。通过这个程序,我们可以学习到如何利用...
**Floyd算法求解最短路径问题(C++源码)** Floyd-Warshall算法是一种用于解决图中所有顶点对之间的最短路径问题的动态规划方法。它由美国计算机科学家Robert W. Floyd在1962年提出,因此得名。这个算法的核心思想...
总之,这个压缩包提供的代码是一个利用遗传算法求解最短路径问题的实例,通过C++和VS2013实现。通过对遗传算法的深入理解和参数调优,我们可以解决实际生活中的多种最短路径问题,实现更高效的路径规划。
蚁群算法(Ant Colony Optimization, ACO)是一种模拟生物界中蚂蚁寻找食物行为的优化算法,常用于解决复杂的组合优化问题,如旅行商问题(Traveling Salesman Problem, TSP)和最短路径问题。在本MATLAB实现的蚁群...
算法设计与分析课内实验——动态规划求单源最短路径。文档很齐全,包括算法分析过程和源代码(java语言eclipse环境)
【标题】:一种改进的蚁群算法求解最短路径问题 【描述】:最短路径问题是在赋权图中找出两个节点间权值最小的路径,是图论中的核心问题,广泛应用于交通网络规划、旅游线路选择等领域。 【标签】: 【部分内容】: ...
动态规划是一种在计算机科学和数学中广泛使用的算法设计技术,特别是在解决最优化问题时。它主要基于分治和归纳的思想,将复杂问题分解为多个相互关联的子问题,然后逐步求解,最终得到原问题的解决方案。在这个场景...
#include //#define LEN sizeof(struct NODE) #define N 10 #define MAX_TYPE 10000 #define ZERO_TYPE 0 /*定义图的邻接链表*/ struct NODE /*邻接表.../*在阶段决策中,各个顶点到收点的最短路径上的前方顶点编号*/
### 基于Dijkstra算法的最短路径求解 #### 概述 最短路径问题是图论中的经典问题之一,在交通规划、网络优化、物流配送等众多领域有着广泛的应用。传统的Dijkstra算法能够有效地计算从一个源节点到图中其他所有...
在IT领域,网络中最长最短路线问题是一个经典且实用的计算问题,广泛应用于交通规划、数据传输优化以及网络资源分配等场景。本压缩包文件"动态计算网络最长最短路线.rar"似乎包含了一个名为"动态计算网络最长最短...
在本毕业设计项目中,我们关注的是使用MATLAB来解决一个经典的计算机科学问题:通过动态规划求解最短路径问题。动态规划是一种有效且广泛应用的算法,尤其在处理具有重叠子问题和最优子结构的问题时。在这个MATLAB...
在本案例中,我们将使用动态规划算法来解决TSP问题,同时结合Solomon数据集的c101文件,以及使用可视化工具展示每次迭代的最优值、最差值和平均值。 首先,让我们深入理解动态规划算法在TSP问题中的应用。TSP问题...
在本文中,我们将深入探讨如何使用粒子群优化算法(Particle Swarm Optimization, PSO)来解决最短路径问题,并且在MATLAB环境中实现这一算法。粒子群算法是一种模拟自然界中鸟群或鱼群群体行为的优化技术,它通过...
"A*算法求解最短路径" A*算法是解决最短路径问题的一种常用算法,它可以用于解决各种类型的路径规划问题,例如游戏开发、地图导航、机器人导航等。A*算法的核心思想是使用启发式搜索算法,通过评估每个节点的价值,...
在这个主题中,我们将深入探讨如何使用动态规划来求解最短路径问题,以及如何通过2.cpp文件中的示例代码来理解这一过程。 一、动态规划简介 动态规划是由美国数学家理查德·贝尔曼在20世纪50年代提出的,它是一种...