Advertisement
kator

Grafy, bfs

Sep 30th, 2014
434
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.11 KB | None | 0 0
  1. package grafy;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.util.*;
  6. /*
  7. class W{
  8.     List<W> laczenia = new ArrayList<W>();
  9.     int numer;
  10.    
  11.  
  12. }
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  * */
  24.  
  25.  
  26. class W{
  27.     private List<W> laczenia=new ArrayList<W>();
  28.     private int number, odleglosc;
  29.     private String color;
  30.     private W poprzednik;
  31.     W(){
  32.     }
  33.     void addConnection(W w){
  34.         laczenia.add(w);
  35.     }
  36.     void delDuplicates(W w){
  37.         for(int i=0;i<w.laczenia.size();++i){
  38.             for(int j=i+1;j<w.laczenia.size();){
  39.                 if(w.laczenia.get(j).equals(w.laczenia.get(i)))w.laczenia.remove(j);
  40.                 else ++j;
  41.             }
  42.         }
  43.     }
  44.     void printConnections(W w){
  45.         this.delDuplicates(w);
  46.         System.out.print(this.number+": ");
  47.         while(!laczenia.isEmpty()){
  48.             System.out.print(laczenia.get(0).number+" ");
  49.             laczenia.remove(0);
  50.         }
  51.         System.out.println();
  52.     }
  53.     void setNumber(int i){
  54.         number = i;
  55.     }
  56.     void setWhite(W w){
  57.         w.color = "bialy";
  58.     }
  59.     void setBlack(W w){
  60.         w.color = "czarny";
  61.     }
  62.     void setGray(W w){
  63.         w.color = "szary";
  64.     }  
  65.     void setOdleglosc(W w,int i){
  66.         w.odleglosc = i;
  67.     }
  68.     int getOdleglosc(W w){
  69.         return w.odleglosc;
  70.     }
  71.     void setPoprzednik(W w){
  72.         poprzednik = w;
  73.     }
  74.     W getPoprzednik(W w){
  75.         return w.poprzednik;
  76.     }
  77.     boolean isWhite(W w){
  78.         return (w.color.equalsIgnoreCase("bialy"))?true:false;
  79.     }
  80.     void BFS(List<W> graf, int s){
  81.         List<W> list = new ArrayList<W>();
  82.         for(int i=0;i<graf.size();++i){
  83.             graf.get(i).setWhite(graf.get(i));
  84.             graf.get(i).setPoprzednik(null);
  85.             graf.get(i).setOdleglosc(graf.get(i), -1);
  86.         }
  87.         graf.get(s).setGray(graf.get(s));
  88.         graf.get(s).setOdleglosc(graf.get(s),0);
  89.         graf.get(s).setPoprzednik(null);
  90.         list.add(graf.get(s));
  91.         while(!list.isEmpty()){
  92.             W u = list.get(0);
  93.             list.remove(0);
  94.             for(W v: u.laczenia)
  95.             {
  96.                 if(v.isWhite(v)){
  97.                     v.setGray(v);
  98.                     v.setOdleglosc(v, u.getOdleglosc(u)+1);
  99.                     v.setPoprzednik(u);
  100.                     list.add(v);
  101.                 }
  102.             }
  103.             u.setBlack(graf.get(u.number));
  104.         }
  105.     }
  106. }
  107.  
  108. public class ListaSasiedztwa {
  109.    
  110.     public static void main(String[] args) throws FileNotFoundException{
  111. //      Random r = new Random();
  112. //     
  113.        
  114.        
  115.        
  116. //      // /\ stworszyl 10 wierzcholkow
  117. //      for(int i=0;i<10;++i){
  118. //          for(int j=r.nextInt(10);j>0;--j){
  119. //              //if(i==j)continue;
  120. //              int x=r.nextInt(10);
  121. //              if(i==x)continue;
  122. //              graf.get(i).addConnection(graf.get(x));
  123. //          }
  124. //      }
  125. //      for(int i=0;i<10;++i){
  126. //          graf.get(i).printConnections(graf.get(i));
  127. //      }
  128. //     
  129.         //przerszukanie w wszerz
  130.        
  131.         Scanner sc = new Scanner(new File("D:\\programowanie\\java\\workspace\\java\\src\\grafy\\graf.txt"));
  132.         List<W> graf = new ArrayList<W>();
  133.         W w;
  134.         int n = sc.nextInt(), x = sc.nextInt();
  135.         for(int i=0;i<n;++i){
  136.             w = new W();
  137.             w.setNumber(i);
  138.             graf.add(w);
  139.         }
  140.         while(sc.hasNext()){
  141.             int a = sc.nextInt(), b = sc.nextInt();
  142.             graf.get(a).addConnection(graf.get(b));
  143.         }
  144.         sc.close();
  145.         w = new W();
  146. //      w.printConnections(w);
  147.         w.BFS(graf, x);
  148.        
  149.        
  150.         for(int i=0;i<n;++i){
  151.             System.out.println((i)+" - "+((graf.get(i).getOdleglosc(graf.get(i))==-1)?"x":""+graf.get(i).getOdleglosc(graf.get(i))+""));
  152.         }
  153.     }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement