Istvan

Gráf szélességi bejárás

Apr 15th, 2012
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.80 KB | None | 0 0
  1. /* Gráf szélességi bejárás:
  2.     A Gráfot mártixban tároljuk.
  3.     Az szBejaras bemenő adatai:
  4.         Egy csúcsmátrixban tárolt gráf (mx).
  5.         Egy egyész szám (start). Ez azt adja meg, hogy melyik csúcsból indítjuk
  6.         a szélességi bejárást.
  7.         A start szám 6×6 os mátrix esetén (6 csúcsú gráf), 0 tól 5 ig terjed.
  8.     Az szBejaras egy void függvény ami kiírja, hogy a start csúcstól melyik pont hány lépésre van.
  9.    
  10.     A kódban beégetett mátrixra és az 5 ös start pontra az értelmezés a következő:
  11.     A gráf 6 os pontjából
  12.         az 1. őt 3 lépésből éri el
  13.         az 2. at 2 lépésből éri el
  14.         az 3. at 2 lépésből éri el
  15.         az 4. et 1 lépésből éri el
  16.         az 5. et 1 lépésből éri el
  17.         az 6. at 0 lépésből éri el.
  18.    
  19.     Ezután van kiíratva a pi tömb:
  20.     A pi tömb az algoritnus végén egy fát tartalmaz. Ki kinek a szülője.
  21. */
  22.  
  23. import java.util.LinkedList;
  24. import java.util.Queue;
  25.  
  26. public class SzelessegiBejaras {
  27.     private int[][] mx = { {0,1,1,0,0,0}, {1,0,1,1,1,0}, {1,1,0,1,0,0},
  28.                            {0,1,1,0,1,1}, {0,1,0,1,0,1}, {0,0,0,1,1,0}, };
  29.    
  30.     public void szBejaras(int[][] mx, int start) {
  31.         System.out.println("Szélességi bejárás");
  32.        
  33.         // Tömbök létrehozása
  34.         int n = mx.length;
  35.         String[] szin = new String[n];
  36.         int[] pi = new int[n];
  37.         int[] d = new int[n];
  38.         // Sor, amibe a csúcsokat fogjuk rakni.
  39.         Queue<Integer> q = new LinkedList<Integer>();  
  40.        
  41.         // Inicializálás
  42.         for ( int i=0; i<n; i++) {
  43.             szin[i] = "W";  // Fehérre állítjuk minden csúcs színét.
  44.             pi[i] = 0;      // Kezdetben egy csúcsnak sincs szülője.
  45.             d[i] = 0;       // A startból startba 0 hosszú út vezet
  46.             szin[start] = "G";  // A kezdő csúcs színe szürke
  47.         }
  48.        
  49.         // Az algoritmus
  50.         q.add(start);
  51.         int u;
  52.         while ( !q.isEmpty() ) {
  53.             u = q.poll();
  54.             for ( int i=0; i<n; i++) {
  55.                 if ( mx[i][u] == 1 ) {
  56.                     if ( szin[i] == "W" ) {
  57.                         q.add(i);
  58.                         d[i] = d[u] + 1;
  59.                         pi[i] = u;
  60.                         szin[i] = "G";  // gray
  61.                     }
  62.                 }
  63.             }
  64.             szin[u] = "B";  // black
  65.         }
  66.        
  67.         // A mátrix kiíratása
  68.         System.out.println("A csúcsmátrix:");
  69.         for (int i=0; i<n; i++) {
  70.             for ( int j=0; j<n; j++) {
  71.                 System.out.print(mx[i][j] + " ");
  72.             }
  73.             System.out.println();
  74.         }
  75.        
  76.         // A d és a pi tömb kiíratása
  77.         System.out.println("A gráf csúcsai számozva, a d és a pi tömb:");
  78.         for ( int k=1; k<=n; k++ ) {
  79.             System.out.print(k);
  80.         }
  81.         System.out.println();
  82.         for ( int k=0; k<n; k++ ) {
  83.             System.out.print(d[k]);
  84.         }
  85.         System.out.println();
  86.         for ( int k=0; k<n; k++ ) {
  87.             System.out.print(pi[k] + 1);
  88.         }
  89.     }
  90.    
  91.     public static void main(String[] args) {
  92.         SzelessegiBejaras bejar = new SzelessegiBejaras();
  93.         // Ha hármassal hívjuk meg akkor az a gráf 4. pontja lesz a start.
  94.         bejar.szBejaras(bejar.mx, 5);
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment