简单实现有向无环图思路

简单实现有向无环图思路给一部分带有 from 和 to 的节点组织成一个有向无环图 给 from 与 to 路径找到他们之前的连线轨迹 实现思路 遍历所有的节点 该节点如果不包含 from 或者 to 的内容且周围只有一个节点这样的节点从我们总的节点中删除 最终找到的就是我们想要的节点路线 代码 demo 如下 importjava lang reflect Array importjava util publicclass

给一部分带有from和to的节点组织成一个有向无环图,给from与to路径找到他们之前的连线轨迹。实现思路:遍历所有的节点,该节点如果不包含from或者to的内容且周围只有一个节点这样的节点从我们总的节点中删除,最终找到的就是我们想要的节点路线。代码demo如下

import java.lang.reflect.Array; import java.util.*; public class CirDemo { public static void main(String[] args) { List 
  
    > datalist=new ArrayList<>(); Integer from=-1; Integer to=-3; List 
   
     > list = getInitDat(); Set 
    
      set = new HashSet<>(); for (Map 
     
       map :list){ set.add(map.get("from")); set.add(map.get("to")); } getFinalData(from,to,set,list); getFromToData(-3,list,datalist); System.out.println(list.size()); } public static void getFinalData(Integer from, Integer to, Set 
      
        set, List 
       
         > list){ Set 
        
          removeSetData = new HashSet 
         
           (); List 
          
            > removeListData=new ArrayList<>(); for (Integer key :set){ int count=0; for (Map 
           
             map :list){ Integer f = map.get("from"); Integer t = map.get("to"); if (key==from || key==to){ break; }else{ if (f==key || t== key){ count++; if (count==1){ removeListData.add(map); }else if (count==2){ removeListData.remove(removeListData.size()-1); } } } } if (count==1 && key !=from && key !=to){ removeSetData.add(key); } } if (removeSetData.size()==0 && removeListData.size()==0){ return ; }else{ set.removeAll(removeSetData); list.removeAll(removeListData); getFinalData(from,to,set,list); } } public static void getFromToData(Integer from,List 
            
              > list,List 
             
               > datalist){ if (list.size()==0){ return; } List 
              
                > removeList=new ArrayList<>(); for (Map 
               
                 dataMap :list){ Integer f = dataMap.get("from"); Integer t = dataMap.get("to"); if (f==from){ Map 
                
                  mp = new HashMap<>(); mp.put("from",from); mp.put("to",dataMap.get("to")); datalist.add(mp); from=dataMap.get("to"); removeList.add(dataMap); break; } if (t==from){ Map 
                 
                   mp = new HashMap<>(); mp.put("from",from); mp.put("to",dataMap.get("from")); datalist.add(mp); from=dataMap.get("from"); removeList.add(dataMap); break; } } list.removeAll(removeList); getFromToData(from,list,datalist); } public static List 
                  
                    > getInitDat(){ List 
                   
                     > list = new ArrayList<>(); Map 
                    
                      map = new HashMap<>(); map.put("from",-7); map.put("to",-6); Map 
                     
                       map1 = new HashMap<>(); map1.put("from",-4); map1.put("to",-6); Map 
                      
                        map2 = new HashMap<>(); map2.put("from",-5); map2.put("to",-6); Map 
                       
                         map3 = new HashMap<>(); map3.put("from",-5); map3.put("to",-3); Map 
                        
                          map4 = new HashMap<>(); map4.put("from",-4); map4.put("to",-2); Map 
                         
                           map5 = new HashMap<>(); map5.put("from",-4); map5.put("to",-1); Map 
                          
                            map6 = new HashMap<>(); map6.put("from",-1); map6.put("to",-9); Map 
                           
                             map7 = new HashMap<>(); map7.put("from",-1); map7.put("to",-8); Map 
                            
                              map8 = new HashMap<>(); map8.put("from",-8); map8.put("to",-10); list.add(map); list.add(map1); list.add(map2); list.add(map3); list.add(map4); list.add(map5); list.add(map6); list.add(map7); list.add(map8); return list; }; } 
                             
                            
                           
                          
                         
                        
                       
                      
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
        
       
      
     
    
  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218578.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:55
下一篇 2026年3月17日 下午11:56


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号