- 浏览: 1217277 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lankk:
lankk 写道事实上,在运行String s1=new St ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
事实上,在运行String s1=new String(&qu ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
同意1楼的说法http://docs.oracle.com/j ...
理解String 及 String.intern() 在实际中的应用 -
raoyutao:
...
jdk 线程池 ThreadPoolExecutor -
hongdanning:
理解了。之前困惑的一些明白了。谢谢分享。
理解String 及 String.intern() 在实际中的应用
pic
text
package map; public class Edge implements Comparable<Edge> { private Point start; private Point end; private int weight; private boolean d; public boolean isD() { return d; } public void setD(boolean d) { this.d = d; } public Edge() { } public Edge(Point start, Point end, int weight) { super(); this.start = start; this.end = end; this.weight = weight; } public Point getStart() { return start; } public void setStart(Point start) { this.start = start; } public Point getEnd() { return end; } public void setEnd(Point end) { this.end = end; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public int compareTo(Edge o) { return o.getWeight() > this.getWeight() ? -1 : o.getWeight() == this.getWeight() ? 0 : 1; } @Override public String toString() { return "edge : "+this.getStart().getLabel()+" to "+this.getEnd().getLabel()+" weight: "+this.getWeight(); } }
package map; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class Gragh { private List<Point> points=new ArrayList<Point>(); private List<Edge> edges=new ArrayList<Edge>(); public List<Point> getPoints() { return points; } public void setPoints(List<Point> points) { this.points = points; } public List<Edge> getEdges() { return edges; } public void setEdges(List<Edge> edges) { this.edges = edges; } }
package map; import java.util.ArrayList; import java.util.List; public class Path { @Override public String toString() { return path.get(path.size()-1).getLabel()+" "+distance; } private int distance; private List<Point> path=new ArrayList<Point>(); private Point start; private Point end; public Point getStart() { return start; } public void setStart(Point start) { this.start = start; } public Point getEnd() { return end; } public void setEnd(Point end) { this.end = end; } public int getDistance() { return distance; } public void setDistance(int distance) { this.distance = distance; } public List<Point> getPath() { return path; } public void setPath(List<Point> path) { this.path = path; } }
package map; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; public class Point { private int index; private String label; private boolean visted; public Point(String label) { this.label=label; } public Point() { } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public boolean isVisted() { return visted; } public void setVisted(boolean visted) { this.visted = visted; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } public static void main(String[] args) { Queue q=new PriorityQueue(); q.add(5); q.add(3); q.add(1); q.add(2); q.add(7); q.add(8); System.out.println(q.poll()); System.out.println(q.poll()); System.out.println(q.poll()); System.out.println(q.poll()); System.out.println(q.poll()); System.out.println(q.poll()); } @Override public String toString() { return "point : "+this.getLabel()+" index: "+this.getIndex(); } }
package map; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; import java.util.Random; import java.util.Stack; public class Client { public static void main(String[] args) { // graghN(6);//无向图的相关计算 graghD(4);//有向图的相关计算 // graghNW(4); } public static void graghNW(int num) { Point[] pointsArray = initPoints(num); int[][] matrix = initMatrix(num); deployMatrixNW(matrix); print(pointsArray, matrix); mstw(pointsArray, matrix); } public static void mstw(Point[] points, int[][] matrix) { int start = 0; System.out.println("dfs \nstart mstw with " + points[start].getLabel()); Stack stack = new Stack(); Point p=points[start]; stack.push(p); p.setVisted(true); Queue q=new PriorityQueue(); for (int i = 0; i < matrix[p.getIndex()].length; i++) { if(matrix[p.getIndex()][i]!=0 && !stack.contains(points[i])){ q.add(matrix[p.getIndex()][i]); } } } public static void graghD(int num) { Point[] pointsArray = initPoints(num); int[][] matrix = initMatrix(num); deployMatrixD(matrix); print(pointsArray, matrix); int[][] result = Warshall(pointsArray, matrix); print(pointsArray, result); // 拓扑排序无法处理环图 } public static int[][] Warshall(Point[] points, int[][] matrix) { for (int p = 0; p < points.length; p++) { for (int x = 0; x < points.length; x++) { for (int y = 0; y < points.length; y++) { if (matrix[x][p] == 1 && matrix[p][y] == 1 && x != y) { matrix[x][y] = 1; // 每次计算一层是否连通 计算n次 每次刷新连通表 最后就成为了n层的连通表 } } } } return matrix; } public static void deployMatrixD(int[][] matrix) { Random r = new Random(System.currentTimeMillis()); for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { if (i == j) { continue; } int value = r.nextBoolean() ? 1 : 0; matrix[i][j] = value; } } } public static void graghN(int num) { Point[] pointsArray = initPoints(num); int[][] matrix = initMatrix(num); deployMatrix(matrix); print(pointsArray, matrix); dfs(pointsArray, matrix); for (int i = 0; i < pointsArray.length; i++) { pointsArray[i].setVisted(false); } bfs(pointsArray, matrix); } public static Point[] initPoints(int num) { Point[] pointsArray = new Point[num]; for (int i = 0; i < pointsArray.length; i++) { pointsArray[i] = new Point(String.valueOf((char) (65 + i))); pointsArray[i].setIndex(i); } return pointsArray; } public static int[][] initMatrix(int num) { int[][] matrix = new int[num][num]; for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { // matrix[i][j] = 0; } } return matrix; } public static void deployMatrix(int[][] matrix) { Random r = new Random(System.currentTimeMillis()); for (int i = 0; i < matrix.length; i++) { for (int j = i + 1; j < matrix[i].length; j++) { int value = r.nextBoolean() ? 1 : 0; matrix[i][j] = value; matrix[j][i] = value; } } } public static void deployMatrixNW(int[][] matrix) { Random r = new Random(System.currentTimeMillis()); for (int i = 0; i < matrix.length; i++) { for (int j = i + 1; j < matrix[i].length; j++) { int value = r.nextInt(5); matrix[i][j] = value; matrix[j][i] = value; } } } public static void print(Point[] points, int[][] matrix) { System.out.print(" "); for (int i = 0; i < points.length; i++) { System.out.print(points[i].getLabel() + " "); } System.out.println(); for (int i = 0; i < matrix.length; i++) { System.out.print(points[i].getLabel() + " "); for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); } } /** * dfs算法走过整个图的路径必定是最小生成树 */ public static void dfs(Point[] points, int[][] matrix) { int start = 0; System.out.println("dfs \nstart with " + points[start].getLabel()); Stack stack = new Stack(); stack.push(points[start]); points[start].setVisted(true); move(points, matrix, stack); } public static void move(Point[] points, int[][] matrix, Stack stack) { Point top = (Point) stack.peek(); boolean flag = false; for (int i = 0; i < matrix[top.getIndex()].length; i++) { if (matrix[top.getIndex()][i] == 1 && !points[i].isVisted()) {// 说明相连 stack.push(points[i]); points[i].setVisted(true); flag = true;// rule No.1 System.out.println("move from " + top.getLabel() + " to " + points[i].getLabel()); move(points, matrix, stack); break; } } if (!flag) { Point p = (Point) stack.pop(); if (!stack.isEmpty()) {// rule No.2 System.out.println("there is no unvisted point connect to " + p.getLabel() + ",return to " + ((Point) stack.peek()).getLabel()); move(points, matrix, stack); } else { System.out.println("stack is null,end search");// rule No.3 } } } public static void bfs(Point[] points, int[][] matrix) { int start = 0; System.out.println("bfs \nstart with " + points[start].getLabel()); Queue queue = new LinkedList(); queue.add(points[start]); points[start].setVisted(true); move(points, matrix, queue); } public static void move(Point[] points, int[][] matrix, Queue queue) { while (!queue.isEmpty()) { Point top = (Point) queue.poll(); System.out.println("stand at " + top.getLabel()); for (int i = 0; i < matrix[top.getIndex()].length; i++) { if (matrix[top.getIndex()][i] == 1 && !points[i].isVisted()) {// 说明相连 queue.add(points[i]); points[i].setVisted(true); System.out.println("from " + top.getLabel() + " visit " + points[i].getLabel()); } } } System.out.println("queue is null,end search"); } }
package map; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.PriorityQueue; import java.util.Queue; import java.util.Random; public class Client2 { public static void main(String[] args) { int num = 6; Gragh g = new Gragh(); initPoints(g, num); initEdges(g, num); int[][] matrix = initMatrix(g); print(g, matrix); mstw(g, matrix); } public static void mstw(Gragh g, int[][] matrix) { int start = 0; System.out.println("mstw \nstart with " + g.getPoints().get(start).getLabel()); List set = new ArrayList(); Point p = g.getPoints().get(start); set.add(p); g.getPoints().remove(p); System.out.println("put "+p); // 查找与起点所有关联的终点不在集合中的边放到优先列表,找到最小的边,把他的终点放到集合中,把和他相关的 // 边也放到优先列表 在找一个最小的边。。。。。 //最小权值的生成树不是唯一的 Queue q = new PriorityQueue(); while (g.getPoints().size() > 0) { for (Iterator iterator = g.getEdges().iterator(); iterator.hasNext();) { Edge edge = (Edge) iterator.next(); if(edge.getStart()==p && !set.contains(edge.getEnd())){//和p相连 但又不在set中 q.add(edge); } if (edge.getEnd()==p && !set.contains(edge.getStart())) { q.add(edge); } } Edge low = (Edge) q.poll(); if(!(set.contains(low.getStart()) && set.contains(low.getEnd()))){ set.add(low); System.out.println("put "+low); if (set.contains(low.getStart())) { set.add(low.getEnd()); System.out.println("put "+low.getEnd()); g.getPoints().remove(low.getEnd()); p = low.getEnd(); } else { set.add(low.getStart()); System.out.println("put "+low.getStart()); g.getPoints().remove(low.getStart()); p = low.getStart(); } } } // for (Iterator iterator = set.iterator(); iterator.hasNext();) { // Object object = (Object) iterator.next(); // System.out.println(object); // } } public static void initPoints(Gragh g, int num) { for (int i = 0; i < num; i++) { Point p = new Point(String.valueOf((char) (65 + i))); p.setIndex(i); g.getPoints().add(p); } } public static void initEdges(Gragh g, int num) { Random r = new Random(System.currentTimeMillis()); for (int i = 0; i < g.getPoints().size(); i++) { for (int j = i + 1; j < g.getPoints().size(); j++) { int weight = r.nextInt(5); if (weight > 0) { Edge e = new Edge(); e.setStart(g.getPoints().get(i)); e.setEnd(g.getPoints().get(j)); e.setWeight(weight); g.getEdges().add(e); } } } } public static int[][] initMatrix(Gragh g) { int[][] matrix = new int[g.getPoints().size()][g.getPoints().size()]; for (Iterator iterator = g.getEdges().iterator(); iterator.hasNext();) { Edge edge = (Edge) iterator.next(); matrix[edge.getStart().getIndex()][edge.getEnd().getIndex()] = edge.getWeight(); matrix[edge.getEnd().getIndex()][edge.getStart().getIndex()] = edge.getWeight(); } return matrix; } public static void print(Gragh g, int[][] matrix) { System.out.print(" "); for (int i = 0; i < g.getPoints().size(); i++) { System.out.print(g.getPoints().get(i).getLabel() + " "); } System.out.println(); for (int i = 0; i < matrix.length; i++) { System.out.print(g.getPoints().get(i).getLabel() + " "); for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); } for (Iterator iterator = g.getEdges().iterator(); iterator.hasNext();) { Edge edge = (Edge) iterator.next(); System.out.println(edge); } } }
package map; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.PriorityQueue; import java.util.Queue; import java.util.Random; public class ClientDW { public static void main(String[] args) { int num = 6; Gragh g = new Gragh(); initPoints(g, num); initEdges(g, num); int[][] matrix = initMatrix(g); print(g, matrix); path(g, matrix); } public static void path(Gragh g, int[][] matrix) { //此算法首先是选一个起点(当前点)A 在他的连接点里找最小的边 把边的终点B加入树(第一次无需刷新路径表) //然后把B做为起点 看他连接着的不在树上的点x中, 点x到B(当前点)的距离 + B到A的距离(确定了的当前点的最短路径) 是否比 路径表里(A到x)的距离近 //如果近 就刷新 A到x的距离 并把B作为x的路径上的最后一个点 //把所有B连接着的点 刷新后 ,然后统计路径表 找出最小的一个点C 加入树,把C做为起点。。。比x+C 是否比路径表里的近 int start = 0; System.out.println("path \nstart with " + g.getPoints().get(start).getLabel()); Path[] pArray = new Path[g.getPoints().size()]; List tree = new ArrayList(); tree.add(g.getPoints().get(start)); System.out.println("put " + g.getPoints().get(start)); Point curentPoint = g.getPoints().get(start); while (tree.size() < g.getPoints().size()) { for (int i = 0; i < matrix[curentPoint.getIndex()].length; i++) { if (pArray[i] == null) { pArray[i] = new Path(); pArray[i].getPath().add(curentPoint); pArray[i].setDistance(999); } if (!tree.contains(g.getPoints().get(i))) { int newD = matrix[curentPoint.getIndex()][i] + (pArray[curentPoint.getIndex()].getDistance() == 999 ? 0 : pArray[curentPoint.getIndex()].getDistance()); int oldD = pArray[i].getDistance(); System.out.println("old " + oldD + " new " + newD); if (newD < oldD) { pArray[i].setDistance(newD); pArray[i].getPath().add(curentPoint); } } } printPathArray(pArray); Queue q = new PriorityQueue(); int index = 0; int min = 9999; for (int i = 0; i < pArray.length; i++) { if (!tree.contains(g.getPoints().get(i))) { if (pArray[i].getDistance() < min) { min = pArray[i].getDistance(); index = i; } } } tree.add(g.getPoints().get(index)); curentPoint = g.getPoints().get(index); System.out.println("mininum distance is " + pArray[index].getDistance() + " from " + pArray[index].getPath().get(pArray[index].getPath().size() - 1) + ", to " + g.getPoints().get(index).getLabel()); System.out.println("put " + g.getPoints().get(index).getLabel()); } for (int i = 0; i < pArray.length; i++) { System.out.print(pArray[i].getDistance() + " "); for (int j = 1; j < pArray[i].getPath().size(); j++) { System.out.print(pArray[i].getPath().get(j).getLabel() + " "); System.out.print(g.getPoints().get(i).getLabel()); } System.out.println(); } } public static void printPathArray(Path[] pArray) { for (int i = 0; i < pArray.length; i++) { System.out.print(pArray[i].getDistance() + " "); } System.out.println(); } public static void initPoints(Gragh g, int num) { for (int i = 0; i < num; i++) { Point p = new Point(String.valueOf((char) (65 + i))); p.setIndex(i); g.getPoints().add(p); } } public static void initEdges(Gragh g, int num) { Random r = new Random(System.currentTimeMillis()); for (int i = 0; i < g.getPoints().size(); i++) { for (int j = 0; j < g.getPoints().size(); j++) { if (i == j) { continue; } int weight = r.nextInt(3); if (weight > 0) { Edge e = new Edge(); e.setStart(g.getPoints().get(i)); e.setEnd(g.getPoints().get(j)); e.setWeight(weight); g.getEdges().add(e); } else { Edge e = new Edge(); e.setStart(g.getPoints().get(i)); e.setEnd(g.getPoints().get(j)); e.setWeight(999); g.getEdges().add(e); } } } } public static int[][] initMatrix(Gragh g) { int[][] matrix = new int[g.getPoints().size()][g.getPoints().size()]; for (Iterator iterator = g.getEdges().iterator(); iterator.hasNext();) { Edge edge = (Edge) iterator.next(); matrix[edge.getStart().getIndex()][edge.getEnd().getIndex()] = edge.getWeight(); } return matrix; } public static void print(Gragh g, int[][] matrix) { System.out.print(" "); for (int i = 0; i < g.getPoints().size(); i++) { System.out.print(g.getPoints().get(i).getLabel() + " "); } System.out.println(); for (int i = 0; i < matrix.length; i++) { System.out.print(g.getPoints().get(i).getLabel() + " "); for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); } for (Iterator iterator = g.getEdges().iterator(); iterator.hasNext();) { Edge edge = (Edge) iterator.next(); System.out.println(edge); } } }
发表评论
-
merge sort collection, block non block algorithm
2015-01-20 14:28 1059import java.util.Collection ... -
IntelliJ IDEA keys
2014-05-29 15:35 1162open type Ctrl+N open ... -
alogrithm notes
2012-11-09 23:59 15712.数组 线性查找 ... -
位操作 设置 查看
2012-05-29 01:33 1061******* /** * 设置操作 ... -
编程珠玑的求最大子集的题
2011-06-02 00:20 2155编程珠玑第二版 第8章 给一个数组 求该数组的最大子集和 ... -
hashmap 源码阅读
2011-04-08 14:28 1168hashmap 在开发中用的很多,看下源码实现学习一下, ... -
for iterator ArrayList遍历效率 测试
2010-03-01 17:35 2821/** * 测试 对于ArrayList的itera ... -
queue
2009-10-28 13:38 1158Queue q=new PriorityQueue(); ... -
quicksort
2009-10-27 19:15 1191import java.util.*; import jav ... -
map
2009-10-27 19:14 1120point package map; import j ...
相关推荐
Map集合笔记,个人版权,请勿用于商业化
MapServer使用笔记
Hadoop-MindMap-思维导图-读书笔记
JS map & set 笔记
C程序员的C++辅导
P231~236C++map学习笔记.docx
day08 【Map】-笔记.pdf
添加: meteor add jeffrey:easy-map笔记: 该软件包的默认width:800px和height:500px 。方向: 在HTML文件中添加{{> map lat:"[latitude]" lng:"[longitude]"}}或{{> map address: [address]}} 。 您将看到地图显示...
NULL 博文链接:https://zxs19861202.iteye.com/blog/647161
有Map的四种遍历方式。Java怎样调用存储过程。九大内置对象。
笔记11-数据结构之MAP和SET
【Cocos2d-x游戏引擎开发笔记(13)】Tiled Map Editor(一)
清华笔记:计算共形几何讲义 (8)狭缝映射(Slit Map)的存在性1
本博文是基于这个ROS软件包(https://github.com/hrnr/m-explore)的学习笔记 目录 multi robot exploration nav_msgs/OccupancyGrid map_msgs/OccupancyGridUpdate move_base multirobot_map_merge 参考资料 ...
达勒姆餐厅地图该站点是使用 ...要推送到 gh-pages: 运行grunt deploy推送到 gh-pages 分支,该分支将发布到www.savaslabs.com/durham-restaurants-map笔记您应该编辑的 javascript 位于 js/map_source.js 中,它将
List set ArraryList Map java集合框架笔记 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用
day017-Map和泛型 代码和笔记.rar 1. Map:地图 2. Properties类:常用来做配置文件 (掌握) 3. 泛型:就是一个占位符号而已,在设计类的时候,占用位置就是在设计类(接口等)的时候,没有给规定具体是什么类型...
SpringMVC笔记.pdf SpringMVC是基于MVC模式的Web应用程序开发框架,它属于Spring Framework的一部分。SpringMVC提供了一个灵活的Web应用程序开发解决方案,帮助开发者快速构建Web应用程序。 一、SpringMVC简介 ...
Java集合可以分为Collection和Map两种体系: Collection接口: List:元素有序,可重复的集合 ArrayList: 底层数组实现,有利于随机访问get LinkedList:底层是链表,有利于频繁的插入、删除操作(ArrayList删除和...
本教程适用于Android Map学习的初学者,这是一本很平易近人的Android入门书籍,也是开发者及非开发者两相宜的实务书籍,它能陪伴你顺利入门,并驰骋于无限宽广的Android系统和应用领域