Guest User

Untitled

a guest
Dec 12th, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.49 KB | None | 0 0
  1. import java.util.*;
  2.  
  3.  
  4. public class Algorithm {
  5.     List<Vertex> openList;
  6.     boolean[] closedList;
  7.     Vertex[] vArray;
  8.     Vertex root;
  9.     List<String> output=new ArrayList<String>();
  10.    
  11.     public Algorithm(List<Vertex> vertexes, List<Edge> edges, int startID){
  12.         openList=new ArrayList<Vertex>();
  13.         output=new ArrayList<String>();
  14.        
  15.         closedList=new boolean[vertexes.size()+1];
  16.        
  17.         for(int i=0; i<closedList.length; i++){
  18.             closedList[i]=false;
  19.         }
  20.        
  21.         vArray=new Vertex[vertexes.size()+1];
  22.        
  23.         for(Vertex v:vertexes){
  24.             vArray[v.id]=v;
  25.            
  26.         }
  27.         root=vArray[startID];
  28.         openList.add(root);
  29.     }
  30.     public void pedigree(Vertex w){
  31.     //  System.out.println(w.id);
  32.         output.add(0, String.valueOf(w.id));
  33.         if(w.father!=root){
  34.             pedigree(w.father);
  35.         } else {
  36.     //      System.out.println(root.id);
  37.             output.add(0, String.valueOf(root.id));
  38.         }
  39.     }
  40.    
  41.     public void toOutput(){
  42.         for(String s:output){
  43.             System.out.println(s);
  44.         }
  45.     }
  46.    
  47.     public void BFS(){
  48.         while(true){
  49.             Vertex work=openList.remove(0);
  50.  
  51.             if(work.isTarget){
  52.                 pedigree(work);
  53.                 break;
  54.             }
  55.  
  56.  
  57.             closedList[work.id]=true;
  58.            
  59.             List<Integer> workList=new ArrayList<Integer>();
  60.             Collections.sort(workList);
  61.             for(Edge e:work.edges){
  62.                 if(e.id1==work.id){
  63.                     Vertex temp=vArray[e.id2];
  64.                     if(!closedList[temp.id]){
  65.                         temp.father=work;
  66.                         workList.add(temp.id);
  67.                     }
  68.                    
  69.                 } else {
  70.                     Vertex temp=vArray[e.id1];
  71.                     if(!closedList[temp.id]){
  72.                         temp.father=work;
  73.                         workList.add(temp.id);
  74.                     }
  75.                 }
  76.             }
  77.             /*if(openList.size()<5){
  78.                 System.out.println("sort előtt:");
  79.                 for(Integer i:workList){
  80.                     System.out.println(i);
  81.                 }
  82.                 System.out.println();
  83.             }*/
  84.             Collections.sort(workList);
  85.             Collections.reverse(workList);
  86.             /*if(openList.size()<5){
  87.                 System.out.println("sort után:");
  88.                 for(Integer i:workList){
  89.                     System.out.println(i);
  90.                 }
  91.                 System.out.println();
  92.             }*/
  93.             for(Integer i:workList){
  94.                 for(int j=1; j<vArray.length; j++){
  95.                     if(i==vArray[j].id){
  96.                         openList.add(vArray[j]);
  97.                     }
  98.                 }
  99.             }
  100.            
  101.         }
  102.     }
  103.    
  104.     public void DFS(){
  105.         while(true){
  106.             Vertex work=openList.remove(0);
  107.  
  108.             if(work.isTarget){
  109.                 pedigree(work);
  110.                 break;
  111.             }
  112.  
  113.  
  114.             closedList[work.id]=true;
  115.            
  116.             List<Integer> workList=new ArrayList<Integer>();
  117.             Collections.sort(workList);
  118.             for(Edge e:work.edges){
  119.                 if(e.id1==work.id){
  120.                     Vertex temp=vArray[e.id2];
  121.                     if(!closedList[temp.id] && !openList.contains(temp)){
  122.                         temp.father=work;
  123.                         workList.add(temp.id);
  124.                     }
  125.                    
  126.                 } else {
  127.                     Vertex temp=vArray[e.id1];
  128.                     if(!closedList[temp.id] && !openList.contains(temp)){
  129.                         temp.father=work;
  130.                         workList.add(temp.id);
  131.                     }
  132.                 }
  133.             }
  134.             /*if(work.id==343){
  135.                 System.out.println("sort előtt:");
  136.                 for(Integer i:workList){
  137.                     System.out.println(i);
  138.                 }
  139.                 System.out.println();
  140.             }*/
  141.             Collections.sort(workList);
  142.             Collections.reverse(workList);
  143.             /*if(work.id==343){
  144.                 System.out.println("sort után:");
  145.                 for(Integer i:workList){
  146.                     System.out.println(i);
  147.                 }
  148.                 System.out.println();
  149.             }*/
  150.             for(Integer i:workList){
  151.                 for(int j=1; j<vArray.length; j++){
  152.                     if(i==vArray[j].id){
  153.                         openList.add(0, vArray[j]);
  154.                     }
  155.                 }
  156.             }
  157.            
  158.         }
  159.     //  System.out.println("apa:"+vArray[363].father.id);
  160.     }
  161.    
  162.     public void UCS(){
  163.         while(true){
  164.             Vertex work=openList.get(0);
  165.             for(Vertex v:openList){
  166.                 if(work.weight>v.weight)
  167.                     work=v;
  168.             }
  169.             openList.remove(work);
  170.  
  171.             if(work.isTarget){
  172.                 pedigree(work);
  173.                 break;
  174.             }
  175.  
  176.             closedList[work.id]=true;
  177.            
  178.             for(Edge e:work.edges){
  179.                 Vertex temp;
  180.                 if(e.id1==work.id){
  181.                     temp=vArray[e.id2];
  182.                 } else {
  183.                     temp=vArray[e.id1];
  184.                 }
  185.                 if(!closedList[temp.id]){
  186.                     if(!openList.contains(temp)){
  187.                         temp.father=work;
  188.                         temp.weight=work.weight+e.weight;
  189.                         openList.add(temp);
  190.                     } else {
  191.                         if(temp.weight>(work.weight+e.weight)){
  192.                             temp.weight=work.weight+e.weight;
  193.                         }
  194.                     }
  195.                 }
  196.             }
  197.             /*if(openList.size()<5){
  198.                 System.out.println("sort előtt:");
  199.                 for(Integer i:workList){
  200.                     System.out.println(i);
  201.                 }
  202.                 System.out.println();
  203.             }*/
  204.             /*if(openList.size()<5){
  205.                 System.out.println("sort után:");
  206.                 for(Integer i:workList){
  207.                     System.out.println(i);
  208.                 }
  209.                 System.out.println();
  210.             }*/
  211.            
  212.         }
  213.     }
  214.    
  215.     public void GBFS(int heuristic){
  216.         while(true){
  217.             Vertex work=openList.get(0);
  218.             for(Vertex v:openList){
  219.                 if(work.weight>v.weight)
  220.                     work=v;
  221.             }
  222.             openList.remove(work);
  223.  
  224.             if(work.isTarget){
  225.                 pedigree(work);
  226.                 break;
  227.             }
  228.  
  229.             closedList[work.id]=true;
  230.            
  231.             for(Edge e:work.edges){
  232.                 Vertex temp;
  233.                 if(e.id1==work.id){
  234.                     temp=vArray[e.id2];
  235.                 } else {
  236.                     temp=vArray[e.id1];
  237.                 }
  238.                 if(!closedList[temp.id]){
  239.                     if(!openList.contains(temp)){
  240.                         temp.father=work;
  241.                         temp.weight=work.weight+e.weight;
  242.                         openList.add(temp);
  243.                     } else {
  244.                         if(temp.weight>(work.weight+e.weight)){
  245.                             temp.weight=work.weight+e.weight;
  246.                         }
  247.                     }
  248.                 }
  249.             }
  250.             /*if(openList.size()<5){
  251.                 System.out.println("sort előtt:");
  252.                 for(Integer i:workList){
  253.                     System.out.println(i);
  254.                 }
  255.                 System.out.println();
  256.             }*/
  257.             /*if(openList.size()<5){
  258.                 System.out.println("sort után:");
  259.                 for(Integer i:workList){
  260.                     System.out.println(i);
  261.                 }
  262.                 System.out.println();
  263.             }*/
  264.            
  265.         }
  266.     }
  267.    
  268.     public void AStar(int heuristic){
  269.        
  270.     }
  271. }
Add Comment
Please, Sign In to add comment