基于简易Web墨卡托计算实现地图绘制,四色染色,实现图的深度优先搜索,广度优先搜索,Kruskal算法最小生成树,Prime算法最小生成树,Dijkstra最短路径算法。

使用Java & Swing开发

基于简易Web墨卡托计算,地图绘制

四色定理染色:

 // 四色算法public void fill() {LinkedList<INode> source = (LinkedList<INode>)__nodes.clone();LinkedList<INode> target = new LinkedList<>();while (source.isEmpty() == false) {INode node = source.pop();target.push(node);boolean bContinue = false;do {INode top = target.peek();Color c = findColor(top);if (c == null) {INode n = target.pop();n.setColor(null);source.push(n);continue ;}top.setColor(c);bContinue = ! detect(top);} while (bContinue == false);}}

BFS优先搜索算法

 // 广度优先搜索public void bfs() {LinkedList<INode> all = (LinkedList<INode>)__nodes.clone();LinkedList<INode> q = new LinkedList<>();while (all.isEmpty() == false) {INode node = all.removeFirst();q.add(node);int p = 0;while (p < q.size()) {INode n = q.get(p);for (INode n1 : n.getChildren()) {boolean b = all.remove(n1);if (b)q.add(n1);}p++;}}__nodes.clear();__nodes.addAll(q);}

DFS深度优先搜索算法:

 // 深度优先搜索public void dfs() {LinkedList<INode> all = (LinkedList<INode>)__nodes.clone();LinkedList<INode> q = new LinkedList<>();while (all.isEmpty() == false) {INode node = all.removeFirst();q.add(node);_dfs(all, q, node);}__nodes.clear();__nodes.addAll(q);}private void _dfs(LinkedList<INode> all, LinkedList<INode> target, INode c) {for (INode n : c.getChildren()) {boolean b = all.remove(n);if (b) {target.add(n);_dfs(all, target, n);}}}

Kruskal最小生成树:

 public List<Edge> Kruskal() {HashSet<Edge> _edges = buildEdge();LinkedList<Edge> edges = new LinkedList<>();edges.addAll(_edges);Collections.sort(edges, new Comparator<Edge>() {@Overridepublic int compare(Edge o1, Edge o2) {return o1.compareTo(o2);}});List<HashSet<INode>> range = new LinkedList<>();LinkedList<Edge> r = new LinkedList<>();for (Edge edge : edges) {HashSet<INode> s1 = null;HashSet<INode> s2 = null;for (HashSet<INode> s : range) {if (s.contains(edge.n1) == true) {s1 = s;}if (s.contains(edge.n2) == true) {s2 = s;}if (s1 != null && s2 != null)break ;}if (s1 != null && s2 != null) {if (s1 == s2)continue ;else {HashSet<INode> s = new HashSet<>();s.addAll(s1);s.addAll(s2);range.remove(s1);range.remove(s2);range.add(s);r.add(edge);}}if (s1 == null && s2 == null) {HashSet<INode> s = new HashSet<>();s.add(edge.n1);s.add(edge.n2);range.add(s);r.add(edge);}if (s1 != null && s2 == null) {s1.add(edge.n2);r.add(edge);}if (s1 == null && s2 != null) {s2.add(edge.n1);r.add(edge);}}return r;}

Prime最小生成树

 public List<Edge> Prime() {LinkedList<Edge> r = new LinkedList<>();LinkedList<INode> range = new LinkedList<>();range.add( this.randomNode() );while (true) {int min = -1;Edge minEdge = null;for (INode node : range) {for (INode child : node.getChildren()) {if (range.contains(child) == false) {Edge edge = new Edge(node, child);int w = Edge.getDistance(node, child);if (minEdge == null) {minEdge = edge;min = w;}else if (w < min) {minEdge = edge;min = w;}}}}if (minEdge != null) {range.add(minEdge.n1);range.add(minEdge.n2);r.add(minEdge);}elsebreak ;}return r;}

Dijkstra算法

 // Dijkstra算法public List<Edge> Dijkstra() {for (int i=0; i<__nodes.size(); i++) {__nodes.get(i).setWeight(-1);}HashSet<Edge> edges = buildEdge();LinkedList<Edge> r = new LinkedList<>();LinkedList<INode> s = new LinkedList<>();LinkedList<INode> all = (LinkedList<INode>) __nodes.clone();INode starter = randomNode();starter.setWeight( 0 );s.add(starter);all.remove(starter);while (all.isEmpty() == false) {INode minNode = null;int minWeight = -1;Edge e = null;for (INode n1 : all) {for (INode n2 : s) {Edge edge = findEdge(edges, n1, n2);if (edge != null) {int d = n2.getWeight() + edge.getDistance();if (minNode == null) {minNode = n1;minWeight =d;e = edge;}else if (d < minWeight) {minNode = n1;minWeight = d;e = edge;}}}}if (minNode != null) {minNode.setWeight(minWeight);s.add(minNode);all.remove(minNode);r.add(e);}elsebreak;}return r;}

地图绘制和四色算法,图搜索算法,最小生成树算法,最短路径算法相关推荐

  1. 图的最小生成树和最短路径算法思路总结(Prim,Kruskal,Dijkstra,Floyd)

    带权无向图->最小生成树算法->Prim算法: 思路: 首先,我们先设置两个集合,U_{}:一个用来放最小生成树的顶点,T_{}:一个用来放最小生成树的边.选取最开始的点V_0,将V_0放 ...

  2. kruskal算法c语言,最小生成树之Kruskal算法

    上一篇文章中提到了最小生成树的Prim算法,这一节继续探讨一下最小生成树的Kruskal算法.什么是最小生成树算法上文已经交代过了,所以我们直接从Kruskal的步骤开始介绍. 1.Kruskal算法 ...

  3. 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...

  4. 算法导论——24.2 DAG最短路径算法java实现

    介绍 Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题,但是对于DAG,可以有更加简化的算法去计算,使得时间复杂度更低. 针对DAG的特点,以拓扑排序为基础,提出了解 ...

  5. 算法设计与分析:最短路径算法

    某个函数(u,v) : 表示这个函数用到u.v这两个点 d[v] : 当前顶点v的值 w[u,...,v] : u到v一种路径的权值 一.松弛relax(u,v) 解释:这是一种计算起始点走到某个顶点 ...

  6. 【数据结构和算法笔记】最小生成树(贪心算法讲解 )

    一.最小生成树(MST)概念: 生成树: 一个连通图的生成树是一个极小连通子图,含图中所有顶点,和构成这棵树的n-1条边 左图的一颗生成树是右图(图的生成树不唯一) 最小生成树: 带权连通无向图有不同 ...

  7. java 地图四色着色算法_趣味地图系列之6 四色定理之我见

    四色定理(four color map theorem)是一个著名的数学定理[1],即对任意的(平面上的)地图染色,要求相邻的国家颜色不同,四种颜色即可完成着色. 南非数学家法兰西斯·古德里在1852 ...

  8. 短小精悍的多源最短路径算法—Floyd算法

    前言 在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径. 在单源正权值最短路径,我们会用Dijkstra ...

  9. 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)

    带权图分为有向和无向,无向图的最短路径又叫做最小生成树,有prime算法和kruskal算法:有向图的最短路径算法有dijkstra算法和floyd算法. 生成树的概念:联通图G的一个子图如果是一棵包 ...

最新文章

  1. 在Windows上搭建Git Server
  2. 【 Vivado 】Performing System-Level Design Entry(总览)
  3. php表单数据提交到本业,PHP_PHP+Mysql+jQuery实现发布微博程序 php篇,先还是要说明本例的业务流程 - phpStudy...
  4. 网易云IM云服务的稳定原来是这样实现的
  5. 数据库-多条件查询-优先级
  6. 海南2021高考成绩分数查询时间,2021海南高考成绩查询公布时间今天几点可以查询...
  7. OpenCV中的神器Image Watch
  8. 奇迹觉醒qq服务器比微信少,十年内最大的奇迹!功能比QQ还少的微信为什么能成功?...
  9. 现在的00后都这么牛X的吗?
  10. JAVA—object映射转化为long类型方式
  11. 2012届华为上机考试题目与参考答案
  12. linux下c语言线程传参数,【linux】C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...
  13. 相机标定(一)—— 向量几何基础
  14. 轻松读懂三极管,原来它是这样工作的
  15. 测试开发大厂社招面试经验分享
  16. 【期末大作业】基于HTML+CSS+JavaScript南京大学网页校园教育网站html模板(3页)
  17. BZOJ 4698 Sdoi2008 Sandy的卡片
  18. 【IKAnalyzer中文分词器详解-(1)分词逻辑】
  19. 当初我要是这么学操作系统就好了(附思维导图)
  20. 现在 MKV、MP4 等格式的压缩与效果都更好,为什么 RMVB 还是那么流行?

热门文章

  1. 05mysql---函数
  2. pgsql -- like使用
  3. 首次披露紫光集团重组战投方智路建广的“双轮驱动”的创新商业模式
  4. 表情可字怎么打_微信新表情怎么打?看完这篇就知道了
  5. Android音频驱动-ASOC之CPU DAI
  6. 使用JDBC技术完成一个简单的账务管理系统
  7. 如何看国际期刊论文?(如何看英文论文)
  8. 判断网页是否在微信浏览器中打开
  9. 类型转换异常,父类不能强转换成子类
  10. 教师和计算机平面设计图谁更好一些,平面设计计算机论文,关于计算机平面设计课程教学策略对中职生就业的作用和意义相关参考文献资料-免费论文范文...