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

本文介绍了如何实现一个自定义的图论顶点类`MyVertex`,该类包含顶点值、访问状态、入度、拓扑排序编号以及邻接边列表。还提供了增删查改邻接边、计算入度和拓扑排序编号等方法,适用于图的遍历和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值