package jimDij;
import java.util.*;
/*****
* a Node object for graph problems. <p>
*
* Each Node contains
* <ul>
* <li> an array of edges,
* <li> a parent, i.e. the best guess for the next node back to the start,
* <li> a pathDistance, the best guess for the distance back to start, and
* <li> a color, BLACK (if the path to it is done) or WHITE (if we're
* still working on this node).
* </ul>
*
* @author Jim Mahoney (mahoney@marlboro.edu)
* @version 0.1 Nov 25 2002
***/
public class Node {
/**
* White nodes are still being worked on by the search algorithm.
**/
public static final int WHITE=0;
/**
* Black nodes have had their shortest path computed.
**/
public static final int BLACK=1;
private static final int INFINITY=100000; // much bigger than distances
private static final int DEFAULT_EDGE_COUNT = 10;
private String name;
private Node parent;
private int color;
private int pathDistance;
// An ArrayList is a Java class in the utilities package
// that's like an array, but with more power and flexibility.
private ArrayList edges;
// --- These are in the applet, but I'm not using them.
//private int x; // only for drawing it on the screen
//private int y;
/***
* @param initialEdgeCount is how many Edges start in the ArrayList.
***/
Node(int initialEdgeCount){
edges = new ArrayList(initialEdgeCount);
color = WHITE;
parent= null;
pathDistance = INFINITY;
}
/***
* By default the Node starts with ten edges.
**/
Node(){
this(DEFAULT_EDGE_COUNT);
}
/***
* @param s is the name of the Node.
***/
Node(String s){
this(10);
setName(s);
}
/****
* displayAsText prints the name, color and pathDistance of a Node.
**/
public void displayAsText(){
Node p = getParent();
String s = p==null ? "" : ""+p.getName();
System.out.println(" Node " + this + " '" + getName() +
"' (" + getColorAsString() +
", d="+ getPathDistance() +
") parent="+s);
//// This shows the edges, too. A bit too much overkill, usually.
// for (Iterator i = edgeIterator(); i.hasNext();){
// Edge e = (Edge)i.next();
// System.out.println(" Edge " + e.getFromNode() + " -> " +
// e.getToNode() + " , distance=" +
// e.getDistance() + ".");
// }
}
public String getColorAsString(){
if (color == WHITE) { return "White"; }
if (color == BLACK) { return "Black"; }
return "";
}
public void addEdge(Edge e){
edges.add(e);
}
public Iterator edgeIterator(){
return edges.iterator();
}
public void setName(String n){
name=n;
}
public String getName(){
return name;
}
public void setParent(Node n){
parent=n;
}
public Node getParent(){
return parent;
}
public boolean hasParent(){
return parent != null;
}
public boolean isBlack(){
return color==BLACK;
}
public void setColor(int c){
color=c;
}
public int getColor(){
return color;
}
public int getPathDistance(){
return pathDistance;
}
public void setPathDistance(int d){
pathDistance = d;
}
//public void setX(int x){
// this.x=x;
//}
//public int getX(){
// return x;
//}
//public void setY(int y){
// this.y=y;
//}
//public int getY(){
// return y;
//}
}
syntax highlighted by Code2HTML, v. 0.9.1