关于图的一些特点就不说了,现在我们先展示的是顶点的实现
/**
* Created by 西皮 on 2017/9/15 19:58.
* 图的顶点类
*/
public class MyVertex<VItem> {
private VItem data;//数据
private int inDegree,outDegree;//出入度数
private VStatus status;//状态
private long dTime,fTime;//时间标签
private int parent;//在遍历树中的父节点
private int priority;//在遍历树中的优先级
public MyVertex(VItem data){
this.data = data;
this.inDegree = 0;
this.outDegree = 0;
this.status = VStatus.UNDISCOVERED;
this.dTime = -1;
this.fTime = -1;
this.parent = -1;
this.priority = Integer.MAX_VALUE;
}
public VItem getData() {
return data;
}
public void setData(VItem data) {
this.data = data;
}
public int getInDegree() {
return inDegree;
}
public void setInDegree(int inDegree) {
this.inDegree = inDegree;
}
public int getOutDegree() {
return outDegree;
}
public void setOutDegree(int outDegree) {
this.outDegree = outDegree;
}
public VStatus getStatus() {
return status;
}
public void setStatus(VStatus status) {
this.status = status;
}
public long getdTime() {
return dTime;
}
public void setdTime(long dTime) {
this.dTime = dTime;
}
public long getfTime() {
return fTime;
}
public void setfTime(long fTime) {
this.fTime = fTime;
}
public int getParent() {
return parent;
}
public void setParent(int parent) {
this.parent = parent;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
}
这里的属性,status使用的enum来标识的,三种顶点状态,分别是UNDISCOVERED
,DISCOVERED
,VISITED
,分别用来表示未被发现,已被发现但是还未访问完毕,已经被访问完毕
/**
* Created by 西皮 on 2017/9/16 9:49.
* 定义顶点状态的枚举类
*/
public enum VStatus {
UNDISCOVERED("UNDISCOVERED"),DISCOVERED("DISCOVERED"),VISITED("VISITED");
private final String value;
VStatus(String value){
this.value = value;
}
public String getValue() {
return value;
}
}
接下来展示边
/**
* Created by 西皮 on 2017/9/16 10:09.
* 图的边类
*/
public class MyEdge<EItem> {
private EItem data;//数据
private int weight;//权重
private EType type;//在便利书中所属的类型
public MyEdge(EItem data,int weight){
this.data = data;
this.weight = weight;
this.type = EType.UNDETERMINED;
}
public EItem getData() {
return data;
}
public void setData(EItem data) {
this.data = data;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public EType <