为算法考试做准备--图论顶点定义实现
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; } }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例