一直贯彻的理念就是:够用就行。
基本思路,一张图,N个节点,然后画好路径,放入图中,然后按照有向线来深度遍历,最后求最短/最长节点。完全自己从地图上最短的路线来编码的。如果是求路径也就是长度,在下面代码中的graph变量里,将List泛型改为一个聚合类,此类包含下一节点与长度,然后在排序那里排长度就行了。估计迷宫也可以这样求解。红警里面的路径求解怎么算的??难怪部队全选再移动就卡,其一,显卡运算,不停的刷屏;其二,单位移动过程中每移动一个数据点都要进行多个操作判断,记录单位坐标=》清空=》再次运算,内存资源来不及清空时,偶尔会弹出内存地址不可读,这种情况,建议,更新CPU和主板。
实例:查找A到I的最少节点路径
package ADT;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
class Node {
String ID = "";
}
public class Graph {
private static HashMap<String, List> graph = new java.util.HashMap<String, java.util.List>();
static java.util.List<Node> getShortPath(Node startN, Node endN) {
java.util.List<Node> list = graph.get(startN.ID);
java.util.List<Node> storelist = new java.util.ArrayList<Node>();
java.util.List<Node> lastlist = new java.util.ArrayList<Node>();
storelist.add(startN);
if (list == null || list.isEmpty()) {
storelist.clear();
return storelist;
}
System.out.print("查找节点:" + startN.ID + ",分别是: ");
for (Node n : list) {
System.out.print(n.ID + ">");
}
System.out.println();
for (int i = 0; i < list.size(); i++) {
Node node = list.get(i);
if (node.ID.equals(endN.ID)) {//查找到就返回
//System.out.println("开始节点:" + startN.ID + ";结束节点:" + node.ID + "==" + endN.ID);
storelist.add(endN);
return storelist;
}
java.util.List<Node> tmplist = getShortPath(node, endN);
if (lastlist.isEmpty()) {
lastlist.addAll(tmplist);
continue;
}
if (tmplist.size() <= lastlist.size()) {//在这里查找出最短路径
if (tmplist.isEmpty()) {
continue;
}
lastlist.clear();
lastlist.addAll(tmplist);//堆栈可替换
}
}
storelist.addAll(lastlist);
return storelist;
}
static void insertNode(Node ver, Node sun) {
if (graph.get(ver.ID) == null) {
//如果没有节点情况,于是乎插入节点
//System.out.println("插入节点:" + ver.ID + ">" + sun.ID);
java.util.List<Node> nodes = new java.util.ArrayList<Node>();
nodes.add(sun);
graph.put(ver.ID, nodes);
return;
}
java.util.List<Node> ls = graph.get(ver.ID);
ls.add(sun);
System.out.println("插入节点:" + ver.ID + ">" + sun.ID);
graph.put(ver.ID, ls);
return;
}
public static void main(String str[]) throws Exception {
//存放数据
Node na = new Node();
Node nb = new Node();
Node nc = new Node();
Node nd = new Node();
Node ne = new Node();
Node nf = new Node();
Node ng = new Node();
Node nh = new Node();
Node ni = new Node();
na.ID = "A";
nb.ID = "B";
nc.ID = "C";
nd.ID = "D";
ne.ID = "E";
nf.ID = "F";
ng.ID = "G";
nh.ID = "H";
ni.ID = "I";
//insertNode(na, null);
insertNode(na, ng);
insertNode(na, nb);
insertNode(nb, nc);
insertNode(nb, nd);
insertNode(nc, ng);
insertNode(nc, nf);
insertNode(nd, ne);
insertNode(ne, nc);
insertNode(nf, nh);
insertNode(ne, ni);
insertNode(nh, ni);
java.util.List<Node> list = getShortPath(na, ni);
for (Node n : list) {
System.out.print("node:" + n.ID + ">");
}
}
}
对于一个基本应用来说,可以不用考虑服务器性能问题,现在的服务器不是以前的赛扬了,需要用到算法的应用所需要的环境基本上不存在于租用空间··算法真的是程序员的神兵利器