Hi Leute ich soll 2 Methoden schreiben die als Eingabe eine Adjazenzmatrix (int[][]) oder Adjazenzliste (int[][]) benutzen.
Die erste Methode habe ich mit einem Freund zusammen gemacht, gehe mal davon aus das die stimmt (der kennt sich ganz gut aus), zweite Methode habe ich "übertragen" stimmt aber sicher nicht da Matrix&Liste nicht dasselbe sind. Fragen zu Punkte im Code habe ich darunter mit // Kommentar gekennzeichnet. Habe leider mit Arrays noch nie programmiert vielleicht als Hinweis.
Die erste Methode habe ich mit einem Freund zusammen gemacht, gehe mal davon aus das die stimmt (der kennt sich ganz gut aus), zweite Methode habe ich "übertragen" stimmt aber sicher nicht da Matrix&Liste nicht dasselbe sind. Fragen zu Punkte im Code habe ich darunter mit // Kommentar gekennzeichnet. Habe leider mit Arrays noch nie programmiert vielleicht als Hinweis.
Java:
import java.util.*;
public class Name {
public static class Degree{
public int[] vertexDegrees; //gibt fur alle Knoten i 2 (0; 1; :::; n 1) am Index i den entsprechenden Knotengrad an
public int smallDelta;
public int bigDelta;
}
/**
*This method takes an adjacency matrix of a graph, calculates the degree of every vertex, its big and small delta
*and returns a Degree-Object containing all this values.
**/
public static Delivery.Degree getDegreesFromAdjMatrix(int[][] adjMatrix){
Degree result = new Degree();
result.smallDelta = Integer.MAX_VALUE;
result.bigDelta = 0;
for(int i = 0 ; i < adjMatrix.length - 1; i++) {
// Was passiert hier? Geht der hier die Zeile durch oder sie Spalte, Komplett oder nur einzelne Werte?
for(int j = 0 ; j < adjMatrix[0].length - 1; j++){
// Selbe Frage wie oben.
if(i == j){
result.vertexDegrees[i] = result.vertexDegrees[i] + adjMatrix[i][j] * 2;
// Das war glaub ich weil Schleifen doppelt gezählt werden, aber wie sieht es in der Liste aus?
} else {
result.vertexDegrees[i] = result.vertexDegrees[i] + adjMatrix[i][j];
}
}
if(result.smallDelta > result.vertexDegrees[i] ){
result.smallDelta = result.vertexDegrees[i];
}
if(result.bigDelta < result.vertexDegrees[i]){
result.bigDelta = result.vertexDegrees[i];
//Beides mal die Ausgabe ist verständlich
}
}
return result;
}
/**
*This method takes an adjacency list of a graph, calculates the degree of every vertex, its big and small delta
*and returns a Degree-Object containing all this values.
**/
public static Delivery.Degree getDegreesFromAdjList(int[][] adjList){
Degree result = new Degree();
result.smallDelta = Integer.MAX_VALUE;
result.bigDelta = 0;
for(int i = 0 ; i < adjList.length - 1; i++) {
for(int j = 0 ; j < adjList.length -1; j++) {
if(i==j) {
result.vertexDegrees[i] = result.vertexDegrees[i] + adjList[i][j] *2;
} else {
result.vertexDegrees[i] = result.vertexDegrees[i] + adjList[i][j];
// Idee ist ja das man bei der Liste den Knotengrad durch die Länge der Liste bekommt ->größter ist Max und kleinster ist Min.
}
}
if(result.smallDelta > result.vertexDegrees[i]) {
result.smallDelta = result.vertexDegrees[i];
}
if(result.bigDelta > result.vertexDegrees[i]) {
result.bigDelta = result.vertexDegrees[i];
}
}
return result;
}
}
Zuletzt bearbeitet: