package utils;
public class MyVertex<T> {
private T value;
private boolean visited;
private MyArrayList<MyEdge<T>> adjEdges;//以本顶点为起点的边
private int inDegree;//入度,即有多少边以此顶点作为终点
private int topNum; //拓扑排序的编号
public MyVertex(T v) {
value = v;
}
public void setValue(T v) {
value = v;
}
public T getValue() {
return value;
}
public void setVisited(boolean visited) {
this.visited = visited;
}
public boolean ifVisited() {
return visited;
}
public void setInDegree(int indegree) {
inDegree = indegree;
}
public int getInDegree() {
return inDegree;
}
public void setTopNum(int topNum) {
this.topNum = topNum;
}
public int getTopNum() {
return topNum;
}
public void addAdjEdge(MyEdge<T> edge) {
if (adjEdges == null) {
adjEdges = new MyArrayList<MyEdge<T>>();
}
adjEdges.add(edge);
//增加边终点的入度
edge.eVert.inDegree++;
}
public int getEdgeNum() {
if (adjEdges == null) return 0;
return adjEdges.size();
}
public MyEdge<T> getEdge(int idx) {
if (adjEdges == null) return null;
return adjEdges.get(idx);
}
public MyEdge<T> getEdge(MyVertex<T> eVert) {
MyEdge<T> result = null;
for (int i = 0; i < adjEdges.size(); ++i) {
if (adjEdges.get(i).eVert.equals(eVert)) {
result = adjEdges.get(i);
break;
}
}
return result;
}
public MyEdge<T> removeEdge(MyVertex<T> eVert) {
MyEdge<T> result = null;
for (int i = 0; i < adjEdges.size(); ++i) {
if (adjEdges.get(i).eVert.equals(eVert)) {
result = adjEdges.remove(i);
//减少边终点的入度
result.eVert.inDegree--;
break;
}
}
return result;
}
@Override
public int hashCode() {
int result = 0;
result = 37 * result + value.hashCode();
return result;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof MyVertex)) {
return false;
}
if (value.equals(((MyVertex<T>)obj).value)) {
return true;
}
return false;
}
}
为算法考试做准备--图论顶点定义实现
最新推荐文章于 2020-03-21 17:17:51 发布