Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Graph
- {
- private Warteschlange w;
- private boolean [] [] am;
- private int maxKnotenAnzahl;
- private Knoten [] knotenliste;
- private int anzahl = 0;
- private int anzahlZusammenhängenderKnoten=0;
- public Graph(int maxKnotenAnzahl)
- {
- this.maxKnotenAnzahl = maxKnotenAnzahl;
- am = new boolean [maxKnotenAnzahl][maxKnotenAnzahl];
- knotenliste = new Knoten[maxKnotenAnzahl];
- w = new Warteschlange();
- }
- public void knotenEinfügen(Knoten k)
- {
- if (anzahl < maxKnotenAnzahl)
- {
- knotenliste[anzahl] = k;
- k.setzeKnotennummer(anzahl);
- anzahl = anzahl+1;
- }
- else
- {
- System.out.println("Graph ist schon voll");
- }
- }
- public boolean istGerichtet()
- {
- for (int i = 0; i < maxKnotenAnzahl; i=i+1)
- for (int j = 0; j < maxKnotenAnzahl; j = j+1)
- if (am [i][j] != am [j][i])
- return true;
- return false;
- }
- public void kanteEinfügen(int von, int nach)
- { //Einfügen einer ungerichteten Kante
- am[von][nach] = true;
- am[nach][von] = true;
- }
- public int gibKantenanzahl()
- {
- int zähler = 0;
- for (int i=0; i<maxKnotenAnzahl; i=i+1)
- {
- for (int j=0; j<maxKnotenAnzahl; j=j+1)
- {
- if (am[i][j] == true)
- zähler++;
- }
- }
- System.out.println(" Kantenanzahl = "+ zähler/2);
- return zähler/2;
- }
- public void druckeMatrix()
- {
- String zeile = " ";
- for (int i=0; i<maxKnotenAnzahl; i=i+1)
- {
- if (i<10)
- zeile = zeile + " "+i;
- else
- zeile = zeile + i;
- }
- System.out.println(zeile);
- for (int i=0; i<maxKnotenAnzahl; i=i+1)
- {
- zeile = "";
- if (i<10)
- zeile = zeile + " "+i;
- else
- zeile = zeile + i;
- for (int j=0; j<maxKnotenAnzahl; j=j+1)
- {
- if (am[i][j] == false)
- zeile = zeile + " .";
- else
- zeile = zeile + " X";
- }
- System.out.println(zeile);
- }
- }
- public int tiefensuche(int startNr)
- {
- // rekursive Methode aufrufen
- return tiefensucheKnoten(startNr);
- }
- public int tiefensucheKnoten(int vindex)
- {
- int summe=1;
- // 0. gib den Knotenindex aus;
- System.out.println(" Index: "+ vindex);
- // 1. Knoten markieren
- knotenliste[vindex].markieren();
- //anzahlZusammenhängenderKnoten++;
- //System.out.println("Es gibt jetzt " + anzahlZusammenhängenderKnoten + " Knoten");
- System.out.println("Es gibt jetzt " + summe + " Knoten");
- // 2. in Adjazenzmatrix Nachbarn heraussuchen und unmarkierte
- // Nachbarn besuchen
- for (int i=0; i<maxKnotenAnzahl; i++)
- {
- if ((am[vindex][i] == true) && (knotenliste[i].istNichtMarkiert()))
- { summe = summe + tiefensucheKnoten(i);
- }
- }
- return summe;
- }
- public void breitensuche(int startNr)
- {
- // in der Knotenliste unter startNr nachschauen
- // und diesen Knoten in Warteschlange w hinten anstellen
- w.hintenAnstellen(knotenliste[startNr]);
- // solange Warteschlange nicht abgearbeitet ist,
- // weitermachen d.h.
- for (int i=0; i<maxKnotenAnzahl; i++) //Nachbarn von Startknoten einfügen
- {
- if ((am[startNr][i] == true) && (knotenliste[i].istNichtMarkiert()))
- { w.hintenAnstellen(knotenliste[i]);
- System.out.println("Es wurde Knoten "+i+" hinten angestellt");
- }
- }
- knotenliste[startNr].markieren();
- w.setzeAktuellWeiter();
- while (w.istAktuellAmEnde() == false)
- {
- Listenelement le=w.gibAktuell();
- Knoten ak = (Knoten) le.gibInhalt();
- int vindex = ak.gibKnotennummer();
- System.out.println(" Index: "+ vindex);
- for (int i=0; i<maxKnotenAnzahl; i++) //Nachbarn von Startknoten einfügen
- {
- if ((am[vindex][i] == true) && (knotenliste[i].istNichtMarkiert()))
- { w.hintenAnstellen(knotenliste[i]);
- }
- }
- knotenliste[vindex].markieren();
- }
- }
- // Nachbarn des aktuellen Knotens finden und die unmarkierten
- // Knoten in w hintenAnstellen()
- // anschließend zum nächsten Knoten in w
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement