您的位置:首页 > 其它

为算法考试做准备--图论顶点定义实现

2015-08-29 11:52 387 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 图论 顶点定义