算法复习 - 最小生成树算法 Prim、Kruskal(普里姆算法、 克鲁斯卡尔算法)
来源:互联网 发布:淘宝店怎么推广最有效 编辑:程序博客网 时间:2024/05/17 03:22
- MapForPK.java
package map;/*** Created by apple on 16/6/18.* 使用邻接表的形式来表示图*/public class MapForPK { private int[][] paths; public MapForPK() { paths = new int[6][6]; paths[0] = new int[]{0, 6, -1, -1, 10, 12}; paths[1] = new int[]{6, 0, 3, 5, -1, 8}; paths[2] = new int[]{-1, 3, 0, 7, -1, -1}; paths[3] = new int[]{-1, 5, 7, 0, 9, 11}; paths[4] = new int[]{10, -1, -1, 9, 0, 16}; paths[5] = new int[]{12, 8, -1, 11, 16, 0}; } public int[][] getPaths() { return paths; }}
- MST.java
package map;import java.util.*;/*** Created by apple on 16/6/18.*/public class MST { public static void Prim(MapForPK map) { List<Integer> openList = new ArrayList<>(); List<Integer> closeList = new ArrayList<>(); for (int i = 0; i < map.getPaths().length; i++) { if (i == 0) { closeList.add(i); System.out.println("下一个节点是:" + i + ",距离为:0"); } else { openList.add(i); } } while (openList.size() > 0) { int minDis = -1; int minPos = -1; int curPos = -1; for (int nextPos: openList) { int pos = closeList.get(0); int dis = map.getPaths()[pos][nextPos]; if (dis != -1 && dis != 0) { minDis = dis; minPos = nextPos; curPos = pos; break; } } for (Integer pos : closeList) { for (int nextPos: openList) { int dis = map.getPaths()[pos][nextPos]; if (dis != -1 && dis != 0 && dis <= minDis) { minDis = dis; minPos = nextPos; curPos = pos; } } } for (Integer pos : openList) { if (pos == minPos) { openList.remove(pos); break; } } closeList.add(minPos); System.out.println("下一个节点是:" + minPos + ",与节点" + curPos + "距离为:" + minDis); } } public static void Kruskal(MapForPK map) { List<Path> paths = new ArrayList<>(); for (int i = 0; i < map.getPaths().length; i++) { for (int j = i+1; j < map.getPaths()[i].length; j++) { if (map.getPaths()[i][j]!=-1) { paths.add(new Path(i, j, map.getPaths()[i][j])); } } } Collections.sort(paths, new Comparator<Path>() { @Override public int compare(Path p1, Path p2) { return p1.getDistance().compareTo(p2.getDistance()); } }); List<Integer> openList = new ArrayList<>(); List<Integer> closeList = new ArrayList<>(); closeList.add(paths.get(0).fromNode); closeList.add(paths.get(0).toNode); System.out.println("添加路径从"+paths.get(0).getFromNode()+"到"+paths.get(0).getToNode() +"距离"+paths.get(0).getDistance()); paths.remove(0); for (int i = 0; i < map.getPaths().length; i++) { if (!closeList.contains(i)) { openList.add(i); } } while(openList.size() > 0) { for (Path path: paths) { if (openList.contains(path.getFromNode()) && closeList.contains(path.getToNode())) { openList.remove(path.getFromNode()); closeList.add(path.getFromNode()); System.out.println("添加路径从"+path.getFromNode()+"到"+path.getToNode() +"距离"+path.getDistance()); paths.remove(path); break; } if (closeList.contains(path.getFromNode()) && openList.contains(path.getToNode())) { openList.remove(path.getToNode()); closeList.add(path.getToNode()); System.out.println("添加路径从"+path.getFromNode()+"到"+path.getToNode() +"距离"+path.getDistance()); paths.remove(path); break; } } } } private static class Path { private Integer distance; private Integer fromNode; private Integer toNode; public Path(Integer fromNode, Integer toNode, Integer distance) { this.fromNode = fromNode; this.toNode = toNode; this.distance = distance; } public Integer getDistance() { return distance; } public Integer getFromNode() { return fromNode; } public Integer getToNode() { return toNode; } }}
- Hello.java
import map.MST;import map.MapForPK;/*** Created by apple on 16/6/13.*/public class Hello { public static void main(String[] args) { MapForPK map = new MapForPK(); System.out.println("Prim:"); MST.Prim(map); System.out.println("Kruskal"); MST.Kruskal(map); }}
0 0
- 算法复习 - 最小生成树算法 Prim、Kruskal(普里姆算法、 克鲁斯卡尔算法)
- 最小生成树(MST)----普里姆(Prim)算法与克鲁斯卡尔(Kruskal)算法
- 图论中最小生成树算法-Prim(普里姆)算法、kruskal(克鲁斯卡尔避圈法)算法、破圈算法
- 最小生成树之克鲁斯卡尔(Kruskal)算法、普里姆(prim)算法
- 最小生成树——prim 普里姆算法 Kruskal 克鲁斯卡尔算法
- 最小生成树——普里姆算法(Prim)和克鲁斯卡尔算法(Kruskal)
- 最小生成树-kruskal算法(克鲁斯卡尔算法)
- 数据结构与算法之最小生成树-普林算法(Prim)/克鲁斯卡尔算法(Kruskal)
- kruskal 克鲁斯卡尔 With Prim 普里姆 最小生成树算法
- 最小生成树-普林算法(Prim)/克鲁斯卡尔算法(Kruskal)
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- 克鲁斯卡尔(Kruskal)算法求解最小生成树
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- 克鲁斯卡尔(Kruskal)算法求最小生成树
- 最小生成树之克鲁斯卡尔(kruskal)算法
- 最小生成树之Kruskal(克鲁斯卡尔)算法
- 最小生成树-克鲁斯卡尔算法(Kruskal)
- 最小生成树 Kruskal(克鲁斯卡尔)算法
- 参加了Object-Oriented Analysis and Design Using UML培训
- UVA-1585 Score
- struts2自定义拦截器
- Andorid 方法数超过64K的问题
- Hive基本类型使用-类型转换
- 算法复习 - 最小生成树算法 Prim、Kruskal(普里姆算法、 克鲁斯卡尔算法)
- Matlab中保存函数内部中间变量到工作空间的两种方法
- Ajax中浏览器的缓存问题解决方法
- UVA-1225 Digit Counting
- IP地址
- 关于GridView的那些事
- Retrofit网络请求框架使用简析——Android网络请求框架(四)
- UVA-1585 Score
- 杂言碎语