/media/sda-magnetic/david/Dok-15-2023-11-27/fernuni-hagen/cs-i-ii/old-cs-2-03/java-new/java-2020-11-08/Graph.java


public class Graph {

    protected boolean[][] adjacencyMatrix;
    protected String[] nodes;

    public static void main (String [] args) {
    
    }
    
    protected int indexOf(String node) throws GraphException {
        for (int i = 0; i < nodes.length; i++) {
            if (node.equals(nodes[i])) {
                return i;
            }
        }
        throw new GraphException();
    }
    public Graph(int nodeNumber) {
        nodes = new String[nodeNumber];
        adjacencyMatrix = new boolean[nodeNumber][nodeNumber];
    }
    public Graph(String[] nodes) {
        this(nodes.length);
        for (int i = 0; i < nodes.length; i++) {
            this.nodes[i] = nodes[i];
        }
    }
    public String getNode(int index) throws GraphException {
        // ...liefert den Namen des Knotens an der
        // durch den Wert des Parameters bezeichneten Position,
        // wenn diese einen Knoten bezeichnet; sonst eine GraphException.
        return nodes[index];
    }
    public int getNumberOfNodes() {
        // ...liefert die Anzahl der Knoten zurueck.
        return nodes.length; // Falsch 
    }
    public void setNodes(String[] nodes) {
        int i;
        // ...weist den ersten k Elementen des Attributs nodes die
        // entsprechenden Werte des Parameters nodes zu. k ist dabei das
        // Minimum aus der Laenge des Attributs und des Parameters.
        for (i = 0;  (i < nodes.length) && (i < this.nodes.length);  i++)
            this.nodes[i] = nodes[i];
        
    }
    public boolean isAdjacent(int index1, int index2) throws GraphException {
        // ...liefert "wahr", wenn die Knoten mit Index
        // index1 und index2 benachbart sind, sonst "falsch".
        if (adjacencyMatrix[index1][index2] != adjacencyMatrix[index2][index1])
            System.out.println ("There has to be a bug");
        return adjacencyMatrix[index1][index2];
    }
    public boolean isAdjacent(String node1, String node2) throws GraphException {
        // ...liefert "wahr", wenn die Laender mit Namen
        // node1 und node2 benachbart sind, sonst "falsch".
        int index1 = indexOf(node1);
        int index2 = indexOf(node2);
        return isAdjacent(index1, index2);
    }
    public void addEdge(int index1, int index2) throws GraphException {
        // ...fuegt Kante zwischen den Knoten mit
        // Index index1 und index2 ein, wenn diese
        // Indizes von Laendern sind; sonst eine GraphException.
        adjacencyMatrix[index1][index2] = true;
        adjacencyMatrix[index2][index1] = true;
    }
    public void addEdge(String node1, String node2) throws GraphException {
        // ...fuegt Kante zwischen den Knoten mit
        // Laendernamen node1 und node2 ein, wenn diese
        // Knoten des Graphen bezeichnen; sonst eine GraphException.
        int index1 = indexOf(node1);
        int index2 = indexOf(node2);
        adjacencyMatrix[index1][index2] = true;
        adjacencyMatrix[index2][index1] = true;
    }
    
}