/**
 * linkStates-objekte speichern in einer hashMap zu jedem knoten eine
 * hashMap, die zu jedem knoten die distanz enthaelt
 * etwa so:
 * a, ( (a,0), (b,4), (c,2), (d,1000000) )
 * b, ( (a,4), (b,0), (c,3), (d,1)  )
 * usw.
 **/
package dijkstra;

import java.util.HashMap;
import java.util.Set;

class LinkStates {

    HashMap<String, HashMap> matrix;    
    HashMap<String, Integer> zeile;
    int anzKnoten = 100;
    String[] a = new String[anzKnoten];

    //startknotennamen liefern
    public String getStartknoten() {
        //return this.a[0];
        return "a";
    }

    //link-state hinzufuegen:
    public void addLinkState(String startKnoten, String nachbar, int distanz) {
        if (matrix == null) {
            matrix = new HashMap();
        }

        if (matrix.containsKey(startKnoten)) {
            zeile = matrix.get(startKnoten);
        } else {
            zeile = new HashMap();
        }
        zeile.put(nachbar, new Integer(distanz));
        matrix.put(startKnoten, zeile);

    }

    public Set<String> getNachbarn(String knoten) {
        System.out.println("die hashMap mit den nachbarn von " + knoten + " :");
        System.out.println(matrix.get(knoten).toString());
        return matrix.get(knoten).keySet();
    }

    public Set<String> getAlleKnoten() {
        return matrix.keySet();
    }

    public int getDistanz(String u, String v) {
        zeile = matrix.get(u);
        return zeile.get(v).intValue();
    }

    public void matrixDrucken() {
        System.out.println("LinkStatesMatrix:");
        Set<String> knotenListe = matrix.keySet();
        for (String knoten : knotenListe) {
            System.out.println(knoten + ": "
                    + matrix.get(knoten).toString());
        }
    }

    public LinkStates() {
//        char[] z = new char[3];
//        int dist = 0;
//        int t = 0;
//        int s = 0;
//
//        for (int i = 0; i < a.length; i++) {
//            for (int j = 0; j < 3; j++) {
//
//                z[j] = (char) ((int) (Math.random() * 26 + 'a'));
//
//
//            }
//            a[i] = new String(z);
//
////            System.out.println(a[i]);
//
//        }
//
//        for (int i = 0; i < a.length*a.length; i++) {
//
//
//            t = (int) (Math.random() * a.length);
//            s = (int) (Math.random() * a.length);
//            dist = (int) (Math.random() * 100);
//            if(!a[t].equals(a[s])){
//                this.addLinkState(a[t], a[s], dist);
//            }
//        }




        
        this.addLinkState("a", "b", 4);
        this.addLinkState("b", "a", 4);
        this.addLinkState("b", "c", 3);
        this.addLinkState("b", "d", 1);
        this.addLinkState("a", "c", 2);
        this.addLinkState("c", "a", 2);
        this.addLinkState("c", "b", 1);
        this.addLinkState("c", "d", 5);
        this.addLinkState("d", "b", 1);
        this.addLinkState("d", "c", 5);
        

        this.matrixDrucken();
    }

    public static void main(String[] args) {
        new LinkStates();
    }
}