ARRRRRRAYYYYLISTEEENNNNNN
parent
6947eee9e0
commit
9b0b57aa5c
|
@ -1,4 +1,4 @@
|
|||
public class Edge
|
||||
public class Edge implements Comparable
|
||||
{
|
||||
private Node anfang;
|
||||
private Node ende;
|
||||
|
@ -17,4 +17,10 @@ public class Edge
|
|||
public int getWert(){return this.wert;}
|
||||
public boolean istGerichtet(){return this.gerichtet;}
|
||||
|
||||
public int compareTo(Object o) {
|
||||
Edge other = (Edge)o;
|
||||
if(this.wert < other.wert)return -1;
|
||||
if(this.wert > other.wert)return 1;
|
||||
return 0;
|
||||
}
|
||||
}
|
111
Graph.java
111
Graph.java
|
@ -108,40 +108,89 @@ public class Graph
|
|||
n.vorgaenger = s;
|
||||
}
|
||||
}
|
||||
|
||||
s.bearbeitet = true;
|
||||
|
||||
while(true){
|
||||
Node next = null;
|
||||
for (Node n : this.nodes){
|
||||
if (!n.bearbeitet) continue;
|
||||
if (n.entfernung == -1) continue;
|
||||
|
||||
if (next == null || next.entfernung > n.entfernung){
|
||||
next = n;
|
||||
}
|
||||
}
|
||||
if (next == null) break;
|
||||
edges = next.getEdges();
|
||||
for (Edge e : edges){
|
||||
Node n;
|
||||
|
||||
if (e.getAnfang() == s ) n= e.getEnde();
|
||||
else n = e.getAnfang();
|
||||
int neu = s.entfernung +e.getWert();
|
||||
if (n.entfernung==-1 || neu < n.entfernung){
|
||||
n.entfernung = neu;
|
||||
n.vorgaenger = next;
|
||||
s.bearbeitet = true;
|
||||
|
||||
while(true){
|
||||
Node next = null;
|
||||
for (Node n : this.nodes){
|
||||
if (!n.bearbeitet) continue;
|
||||
if (n.entfernung == -1) continue;
|
||||
|
||||
if (next == null || next.entfernung > n.entfernung){
|
||||
next = n;
|
||||
}
|
||||
}
|
||||
if (next == null) break;
|
||||
edges = next.getEdges();
|
||||
for (Edge e : edges){
|
||||
Node n;
|
||||
|
||||
if (e.getAnfang() == s ) n= e.getEnde();
|
||||
else n = e.getAnfang();
|
||||
int neu = s.entfernung +e.getWert();
|
||||
if (n.entfernung==-1 || neu < n.entfernung){
|
||||
n.entfernung = neu;
|
||||
n.vorgaenger = next;
|
||||
}
|
||||
}
|
||||
next.bearbeitet = true;
|
||||
}
|
||||
next.bearbeitet = true;
|
||||
Node z = this.getNode(ziel);
|
||||
ArrayList<Node> ergebnis = new ArrayList<Node> ();
|
||||
while (z != null){
|
||||
ergebnis.add(z);
|
||||
z=z.vorgaenger;
|
||||
}
|
||||
return ergebnis;
|
||||
|
||||
}
|
||||
Node z = this.getNode(ziel);
|
||||
ArrayList<Node> ergebnis = new ArrayList<Node> ();
|
||||
while (z != null){
|
||||
ergebnis.add(z);
|
||||
z=z.vorgaenger;
|
||||
|
||||
private boolean istBaum(int start){
|
||||
ArrayList<Node> ergebnis = new ArrayList<Node>();
|
||||
LinkedList<Node> q = new LinkedList<Node>();
|
||||
q.add(this.getNode(start));
|
||||
|
||||
while(!q.isEmpty()){
|
||||
Node aktuell = q.removeFirst();
|
||||
if (ergebnis.contains(aktuell)){
|
||||
return false;
|
||||
}
|
||||
|
||||
ArrayList<Node> erreichbar = aktuell.getTargets();
|
||||
Collections.sort(erreichbar);
|
||||
q.addAll(erreichbar);
|
||||
|
||||
ergebnis.add(aktuell);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public Graph prim(){
|
||||
Graph sb = new Graph();
|
||||
for (Node n: this.nodes){
|
||||
sb.addNode(n.getNumber());
|
||||
}
|
||||
|
||||
ArrayList<Edge> available = new ArrayList<Edge>();
|
||||
ArrayList<Node> done = new ArrayList<Node>();
|
||||
ArrayList<Edge> added = new ArrayList<Edge>();
|
||||
done.add(this.getNode(1));
|
||||
while(true){
|
||||
for (int i = 0; i < done.size(); i++){
|
||||
Node n = done.get(i);
|
||||
for (Edge e : n.getEdges()){
|
||||
if (!done.contains(e.getEnde())||!added.contains(e))available.add(e);
|
||||
}
|
||||
Collections.sort(available);
|
||||
}
|
||||
if(available.isEmpty())break;
|
||||
Edge p = available.get(0);
|
||||
ArrayList<Node> erreichbar = sb.tiefensuche(1);
|
||||
sb.addEdge(p);
|
||||
added.add(p);
|
||||
done.add(p.getEnde());
|
||||
}
|
||||
return sb;
|
||||
}
|
||||
return ergebnis;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,10 +38,10 @@ public class Node implements Comparable
|
|||
ArrayList<Edge> t= new ArrayList<Edge>();
|
||||
for (Edge e : this.edges){
|
||||
if(e.getAnfang()== this){
|
||||
edges.add(e);
|
||||
t.add(e);
|
||||
}
|
||||
else if (!e.istGerichtet()){
|
||||
edges.add(e);
|
||||
t.add(e);
|
||||
}
|
||||
}
|
||||
return t;
|
||||
|
|
Loading…
Reference in New Issue