写个原创的小算法,如何算出遍历每个点的路径最短
2018-03-06 17:33
447 查看
首先,我们明确一下需求,要求在a,b,c,d,e五个点中,先选一个起点,然后选一个终点。这个路径必须经过这五个所有的点,求最短路径。
private void Computingdistance() { List<Integer> arrayList = new ArrayList<>(); for (int i = 0; i < mDateSearchBeanData.size(); i++) { if (i == startpoint || i == endpoint) { } else { arrayList.add(i); } } int length = arrayList.size(); int[] array = new int[length]; for (int i = 0; i < arrayList.size(); i++) { array[i] = arrayList.get(i); } permute(array, 0); // System.out.println("bigArray.size() " + bigArray.size()); countMin(); int[] finalend = endSize.get(0); String mShowText = ""; for (int i = 0; i < finalend.length; i++) { // mShowText = mShowText+mDateSearchBeanData.get(finalend[i]).getObj_name()+"--->"; if (i == finalend.length - 1) { mShowText = mShowText + mDateSearchBeanData.get(finalend[i]).getObj_name(); } else { mShowText = mShowText + mDateSearchBeanData.get(finalend[i]).getObj_name() + "--->"; } } //// TODO: 2017/10/16 Intent intent = new Intent(this, MyTripActivity.class); intent.putExtra("array", finalend); setResult(RESULT_OK, intent); finish(); mShowFinal.setText(mShowText); }
//计算出每种路径的经过的点
private void permute(int a[], int s) {if (s == a.length) {mHeadA = new int[a.length + 2];mHeadA[0] = startpoint;mHeadA[mHeadA.length - 1] = endpoint;for (int i = 0; i < a.length; i++) {mHeadA[i + 1] = a[i];}bigArray.add(Arrays.asList(mHeadA));} else for (int i = s; i < a.length; ++i) {swap(a, s, i);permute(a, s + 1);swap(a, s, i);}}
//计算最短路径
private void countMin() {// System.out.println("bigArray.size() " + bigArray.size());double distance = 0.0;double minDistance = Double.MAX_VALUE;for (int i = 0; i < bigArray.size(); i++) {List<int[]> list = bigArray.get(i);for (int j = 0; j < list.size(); j++) {int[] size = list.get(j);//计算总长度for (int k = 0; k < size.length - <4000span style="color:#0000ff;">1; k++) {distance = distance + getDistance(size[k], size[k + 1]);}if (distance <= minDistance) {minDistance = distance;if (endSize != null) {endSize.clear();}endSize.add(size);}// System.out.println("minDistance " + distance);}}这样写有点不清晰,而且懒的写注释。我就大概流程说一下,startpoint和endpoint是选中的起点和终点。在集合中先把选中的两个点删去,并记录下来。然后将剩下的点做排序
。然后将起点和终点又加回去。最后将重新排序的数组依次计算距离,取其中最短的那个
相关文章推荐
- 数据结构--二叉树--输出树中从根到每个叶子节点的路径(树遍历算法的应用) .
- 数据结构:图——图的遍历、最小生成树、最短路径算法
- Dijkstra [迪杰斯特拉]算法思路(求单点到其他每个点的各个最短路径)Floyd算法:任意两点间最短距离
- [数据结构]--图(图的遍历,最小生成树,最短路径算法)
- 图的遍历、拓扑排序、最短路径算法
- 原创:对图最短路径算法的实现(两种)
- 第17周 啊哈算法 图的遍历算法-Floyd多源最短路径算法
- 图的遍历、拓扑排序、最短路径算法
- 使用广度遍历算法寻找两点之间的最短路径
- 图的遍历、拓扑排序、最短路径算法
- 地铁线路图高性能查找算法系统,最短路径查询地铁网络拓扑高效率算法-原创-附带demo
- 弗洛伊德(Floyd)算法求解图的最短路径
- Dijkstra最短路径算法[贪心]
- 最短路径算法----floyd(转)
- [数据结构]第六次作业:图的建立、遍历、最小生成树、最短路径
- 【141029】VC游戏编写中的求解最短路径算法源码
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 数据结构与算法问题 单源最短路径 浙大OJ
- Johnson 全源最短路径算法
- 图-有权图-最短路径算法