Hallo,
ich sitze schon seit Tagen an einer alten Klausuraufgabe. Gegeben ist:
Und man soll überprüfen, ob die gegebene Matrix zyklenfrei und zusammenhängend ist, also einem Baum entspricht. Ich hab eine Lösung gefunden und die auch getestet, nur ist sie zu lang und bei gerichteten Graphen mit mehr als einer einlaufenden Kante gibt er manchmal auch true zurück. Die Frage wäre, kann ich irgendwo etwas kürzen oder es besser machen? In der Klausur hätte ich gerade mal 10 Minuten zum bearbeiten der Aufgabe gehabt und da ist auch wenig Platz auf der Seite, das heißt, die Lösung ist anscheinend kurz und "einfach". Profs sind alle im Urlaub und keiner antwortet mir, darum dachte ich, ich versuche mein Glück hier, in der Hoffnung, dass jemand mir vielleicht weiterhelfen kann. Hier mein Code:
LG
ich sitze schon seit Tagen an einer alten Klausuraufgabe. Gegeben ist:
Java:
public class Graph {
boolean[][] matrix;
boolean[] besucht;
//...
public boolean istBaum() {
besucht = new boolean[matrix.length];
return istBaum(0);
}
public boolean istBaum(int knoten) {}
}
Und man soll überprüfen, ob die gegebene Matrix zyklenfrei und zusammenhängend ist, also einem Baum entspricht. Ich hab eine Lösung gefunden und die auch getestet, nur ist sie zu lang und bei gerichteten Graphen mit mehr als einer einlaufenden Kante gibt er manchmal auch true zurück. Die Frage wäre, kann ich irgendwo etwas kürzen oder es besser machen? In der Klausur hätte ich gerade mal 10 Minuten zum bearbeiten der Aufgabe gehabt und da ist auch wenig Platz auf der Seite, das heißt, die Lösung ist anscheinend kurz und "einfach". Profs sind alle im Urlaub und keiner antwortet mir, darum dachte ich, ich versuche mein Glück hier, in der Hoffnung, dass jemand mir vielleicht weiterhelfen kann. Hier mein Code:
Java:
public boolean istBaum(int knoten) {
besucht[knoten] = true;
for (int i = 0; i < matrix.length; i++) {
if (matrix[knoten][i] || matrix[i][knoten])
if (!besucht[i]) {
istBaum(i);
}
}
for (int i = 0; i < matrix.length; i++) {
if (!besucht[i])
return false;
}
return istZyklenfrei();
}
public boolean istZyklenfrei() {
int wert = 0;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j])
wert++;
}
}
if (!istSymmetrisch()) {
if (wert > matrix.length - 1)
return false;
} else {
if (wert > 2 * matrix.length - 2)
return false;
}
return true;
}
public boolean istSymmetrisch() {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (matrix[i][j] != matrix[j][i])
return false;
}
}
return true;
}
LG
Zuletzt bearbeitet von einem Moderator: