Markieren von Knoten
In vielen Graphenalgorithmen werden die Knoten des Graphen mit Markierungen versehen. Als Knotenmenge eines Graphen verwenden wir die Menge {0, ..., n-1}. Um die Knoten des Graphen zu markieren, genügt es somit, die Elemente der Menge {0, ..., n-1} zu markieren.
Die Markierungen sind zunächst von unbestimmtem Typ; entsprechend versehen wir die Klasse Marker mit einem Typ-Parameter Type. Da es in Java keine Arrays mit Typ-Parameter gibt, verwenden wir stattdessen eine ArrayList mit dem entsprechenden Typ-Parameter. Der einfachste Fall ist die Markierung mit true oder false; hierfür leiten wir eine Klasse BooleanMarker von der Klasse Marker ab.
public class Marker<Type>
{
private int n;
public final Type unmarked;
private ArrayList<Type> mark;
public Marker(int n_, Type unmarked_)
{
n=n_;
unmarked=unmarked_;
mark=new ArrayList<Type>(n);
for (int i=0; i<n; i++)
mark.add(unmarked);
}
public void setMark(int i, Type t)
{
mark.set(i, t);
}
public Type getMark(int i)
{
return mark.get(i);
}
public void unmark(int i)
{
setMark(i, unmarked);
}
public void clear()
{
for (int i=0; i<n; i++)
unmark(i);
}
public boolean isMarked(int i)
{
return !getMark(i).equals(unmarked);
}
@Override
public String toString()
{
String s="";
for (int i=0; i<n; i++)
s+=getMark(i)+" ";
return s;
}
}
Für den einfachen Fall eines Markers mit Typ-Parameter Boolean steht die Klasse BooleanMarker zur Verfügung.
public class BooleanMarker extends Marker<Boolean>
{
public BooleanMarker(int n_)
{
super(n_, false);
}
public void mark(int i)
{
setMark(i, true);
}
}
Beispiele für die Verwendung von Markern finden sich in Graphenalgorithmen wie Berechnung der Zusammenhangskomponenten
Weiter mit:
[up]
H.W. Lang mail@hwlang.de Impressum Datenschutz
Created: 17.09.2012 Updated: 20.02.2023
Diese Webseiten sind während meiner Lehrtätigkeit an der Hochschule Flensburg entstanden