java 迭代算法使用—找节点路径
来源:互联网 发布:linux 网络问题排查 编辑:程序博客网 时间:2024/06/09 21:05
如上图找出从H到A的节点:
public class Test4 { private Stack<String> stack=new Stack<>(); private List<List<String>> sers =new ArrayList<>(); public Test4() { List<Map<String, List<String>>> alls=getAll(); iterationTest("H",null, "H", "A", alls); for(int i=0;i<sers.size();i++){ System.out.println(sers.get(i)); } } private boolean isNotInStack(String RoadWay){ Iterator<String> it = stack.iterator(); while (it.hasNext()) { String node = (String) it.next(); if (RoadWay == node) return true; } return false; } private boolean iterationTest(String curr, String pre, String start, String end,List<Map<String, List<String>>> alls) { String next = null; /* 如果符合条件判断说明出现环路,不能再顺着该路径继续寻路*/ if (curr != null && pre != null && curr.equals(pre)) return false; //当前栈中的长度超出集合中的 if(sers.size()>0){ if(stack.size()>=sers.get(0).size()){ return false; } } stack.push(curr); if (end.equals(curr)){ showAndSavePath(); return true; } //当前不是最后一个 List<String> connects = getConnects(curr,alls); for(int i=0;i<connects.size();i++){ next = connects.get(i); if (pre != null&&( next == start|| next == pre|| isNotInStack(next))) { continue; } if (iterationTest(next, curr, start, end,alls)){/* 递归调用 */ stack.pop(); } } //说明该节点除了与上一个节点相连外,没有节点与他相连,直接出栈 stack.pop(); return false; } private void showAndSavePath(){ List<String> o = new ArrayList<String>(stack); for(int i =0;i<sers.size();i++){ if(sers.get(i).size()>=o.size()){ sers.remove(i); i--; } } sers.add(o); /* 转储 */ } private List<Map<String, List<String>>> getAll() { List<Map<String, List<String>>> alls=new ArrayList<>(); Map<String, List<String>> mapA=new HashMap<>(); List<String> listA = new ArrayList<String>(); listA.add("B"); mapA.put("A",listA); Map<String, List<String>> mapB=new HashMap<>(); List<String> listB = new ArrayList<String>(); listB.add("A"); listB.add("C"); mapB.put("B",listB); Map<String, List<String>> mapC=new HashMap<>(); List<String> listC = new ArrayList<String>(); listC.add("B"); listC.add("D"); mapC.put("C",listC); Map<String, List<String>> mapD=new HashMap<>(); List<String> listD = new ArrayList<String>(); listD.add("C"); listD.add("E"); listD.add("L"); mapD.put("D",listD); Map<String, List<String>> mapE=new HashMap<>(); List<String> listE = new ArrayList<String>(); listE.add("D"); listE.add("F"); listE.add("G"); mapE.put("E",listE); Map<String, List<String>> mapF=new HashMap<>(); List<String> listF = new ArrayList<String>(); listF.add("E"); mapF.put("F",listF); Map<String, List<String>> mapG=new HashMap<>(); List<String> listG = new ArrayList<String>(); listG.add("E"); listG.add("H"); listG.add("L"); mapG.put("G",listG); Map<String, List<String>> mapH=new HashMap<>(); List<String> listH = new ArrayList<String>(); listH.add("G"); listH.add("I"); listH.add("K"); mapH.put("H",listH); Map<String, List<String>> mapI=new HashMap<>(); List<String> listI = new ArrayList<String>(); listI.add("H"); listI.add("J"); mapI.put("I",listI); Map<String, List<String>> mapJ=new HashMap<>(); List<String> listJ = new ArrayList<String>(); listJ.add("I"); listJ.add("M"); listJ.add("K"); mapJ.put("J",listJ); Map<String, List<String>> mapK=new HashMap<>(); List<String> listK = new ArrayList<String>(); listK.add("H"); listK.add("J"); listK.add("L"); mapK.put("K",listK); Map<String, List<String>> mapL=new HashMap<>(); List<String> listL = new ArrayList<String>(); listL.add("K"); listL.add("G"); listL.add("D"); mapL.put("L",listL); Map<String, List<String>> mapM=new HashMap<>(); List<String> listM = new ArrayList<String>(); listM.add("J"); mapM.put("M",listM); alls.add(mapA); alls.add(mapB); alls.add(mapC); alls.add(mapD); alls.add(mapE); alls.add(mapG); alls.add(mapH); alls.add(mapI); alls.add(mapJ); alls.add(mapK); alls.add(mapL); alls.add(mapM); return alls; } private List<String> getConnects(String key, List<Map<String, List<String>>> alls){ List<String> connects=new ArrayList<>(); for(Map<String, List<String>> param:alls){ if(param.get(key)!=null){ connects=param.get(key); break; } } return connects; } public static void main(String[] args) { new Test4(); }}
1 0
- java 迭代算法使用—找节点路径
- 迭代算法 JAVA
- 迭代算法 JAVA
- 数据结构与算法分析(Java语言描述)(28)—— 使用 dfs 求两节点间的路径
- Java 迭代 apriori算法
- 算法设计与分析——使用dijkstra算法计算最短路径并且给出路径上的节点序列
- 无向图中节点的迭代得到从起始节点到结束节点之间的所有路径,并从中得到最短路径的节点
- Java常用算法——迭代 & 递归篇
- java实现N皇后迭代算法
- 使用迭代遍历元素Java LinkedList
- 使用Java语句决定和迭代
- 【经典算法】迷宫找路径C#版
- 使用Java编写A*路径规划算法
- jacobi迭代算法
- 信道容量迭代算法
- 举例说明迭代算法
- 迭代算法
- 下降迭代算法
- 《swift2.0 官方教程中文版》 第2章-16自动引用计数
- Hibernate学习笔记(一)
- iOS真机开机图片不显示
- App Transport Security has blocked a cleartext HTTP (http://)错误处理
- leetcode:67 Add Binary-每日编程第四十三题
- java 迭代算法使用—找节点路径
- MySQL的if,case语句使用总结
- Python 迭代器 & __iter__方法
- Android GPS定位实现,教你如何一分钟实现GPS定位
- Jvm性能调优与监控
- cocos2dx 创建lua项目 scheduler使用
- C++编程思想学习笔记---第14章 继承和组合
- ios音乐和视频合成
- linux下离线配置安卓开发环境