Oppgave 1
Pass på at dette kommer øverst:
import java.io.*; import java.net.URL;
Konstruktøren:
public VGraf(String url) throws IOException // konstruktør - henter fra fil { try (BufferedReader inn = new BufferedReader // leser fra fil (new InputStreamReader((new URL(url)).openStream()))) { noder = new TreeMap<>(); // oppretter en TreeMap String linje; while ((linje = inn.readLine()) != null) { String[] s = linje.split(" "); // deler opp linjen String fra = s[0]; // franode kommer først leggInnNode(fra); for (int i = 1; i < s.length; i += 2) // går gjennom kantene { String til = s[i]; // noden kanten går til int vekt = Integer.parseInt(s[i+1]); // kantens vekt leggInnNode(til); // legger inn tilnode leggInnKant(fra, til, vekt); // legger inn kanten } } } }
Den indre klassen Kant
skal ha denne metoden:
@Override public String toString() { return "(" + til.navn + "," + vekt + ")"; }
Den indre klassen Node
skal ha denne metoden:
@Override public String toString() { return navn; }
Oppgave 2
public void skrivGraf(String filnavn) throws IOException { PrintWriter ut = new PrintWriter(filnavn); for (String nodenavn : this) // bruker iteratoren i grafen { ut.print(nodenavn); Node node = noder.get(nodenavn); // bruker iteratoren i kantlisten for (Kant k : node.kanter) { ut.print(" " + k.til.navn + " " + k.vekt); } ut.println(); } ut.close(); }
Oppgave 3
public int leggInnKant(String franode, String tilnode, int vekt) { if (franode.equals(tilnode)) throw // sjekker om de er like new IllegalArgumentException(franode + " er lik " + tilnode + "!"); Node fra = noder.get(franode); // henter franode if (fra == null) throw new NoSuchElementException(franode + " er ukjent!"); Node til = noder.get(tilnode); // henter tilnode if (til == null) throw new NoSuchElementException(tilnode + " er ukjent!"); // sjekker om kanten finnes fra før for (Kant kant : fra.kanter) // går gjennom kantene { if (kant.til == til) { int gammelvekt = kant.vekt; kant.vekt = vekt; return gammelvekt; } } // dette er en ny kant fra.kanter.add(new Kant(til, vekt)); // legger til i kantlisten return vekt; }
Oppgave 4
public boolean erKant(String franode, String tilnode) { Node fra = noder.get(franode); // henter franode if (fra == null) throw new NoSuchElementException(franode + " er ukjent!"); Node til = noder.get(tilnode); // henter tilnode if (til == null) throw new NoSuchElementException(tilnode + " er ukjent!"); for (Kant k : fra.kanter) if (k.til == til) return true; return false; }
Oppgave 5
public boolean fjernKant(String franode, String tilnode) { Node fra = noder.get(franode); // henter franode if (fra == null) throw new NoSuchElementException(franode + " er ukjent!"); Node til = noder.get(tilnode); // henter tilnode if (til == null) throw new NoSuchElementException(tilnode + " er ukjent!"); for (Iterator<Kant> i = fra.kanter.iterator(); i.hasNext(); ) { Kant k = i.next(); if (k.til == til) { i.remove(); // fjerner den som nettopp er lest return true; // kanten er fjernet } } return false; // ingen kant }
Oppgave 6
public String[] kantTabellFra(String node) { Node fra = noder.get(node); // henter noden if (fra == null) throw new NoSuchElementException(node + " er ukjent!"); String[] tabell = new String[fra.kanter.size()]; int i = 0; for (Kant k : fra.kanter) tabell[i++] = k.til.navn; return tabell; }
Oppgave 7
public String[] kantTabellTil(String node) { Node til = noder.get(node); // henter noden if (til == null) throw new NoSuchElementException(node + " er ukjent!"); List<String> liste = new ArrayList<>(); for (String franode : noder.keySet()) { for (Kant k : noder.get(franode).kanter) { if (k.til == til) liste.add(franode); } } return liste.toArray(new String[liste.size()]); }
Oppgave 8
public boolean fjernNode(String node) { if (kantTabellFra(node).length == 0 && kantTabellTil(node).length == 0) { noder.remove(node); return true; } return false; }