加权有向图

这篇博客介绍了如何使用Java实现加权有向图的数据结构,包括 DirectedEdge 类用于表示有向边,以及 EdgeWeightedDiGraph 类用于存储和操作这些边。EdgeWeightedDiGraph 类使用邻接表来存储图的结构,并提供了添加边、获取顶点数、边数以及所有边的方法。

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

1.知识储备
在这里插入图片描述
在这里插入图片描述
2.边的实现:

package Graph;

public class DirectedEdge {
    //起点
	private final int v;
	//终点
	private final int w;
	//权重
	private final double weight;
	
	//通过起点、终点、和权重构建一条有向边的对象
	public DirectedEdge(int v,int w,double weight) {
		// TODO Auto-generated constructor stub
		this.v=v;
		this.w=w;
		this.weight=weight;
	}
	
	//获取边的权重值
	public double weight(){
		return weight;
	}
	
	//获取有向边的起点
	public int from(){
		return v;
	}
	
	//获取有向边的终点
	public int to(){
		return w;
	}
}

3.加权有向图的实现:

package Graph;

import Queue.Queue;

public class EdgeWeightedDiGraph {
    //顶点总数
	private final int V;
	//边的总数
	private int E;
	//邻接表
	private Queue<DirectedEdge>[] adj;
	
	//创建一个含有V个顶点的加权有向图
	public EdgeWeightedDiGraph(int v) {
		// TODO Auto-generated constructor stub
		this.V=v;
		this.E=0;
		this.adj=new Queue[V];
		for(int i=0;i<V;i++){
			adj[i]=new Queue<DirectedEdge>();
		}
	}
	
	//获取顶点数量
	public int V(){
		return V;
	}
	
	//获取边的数量
	public int E(){
		return E;
	}
	
	//向加权有向图中添加一条边
	public void addEdge(DirectedEdge e){
		//边e是有方向的, 只需要让边出现在起点的邻接表中即可
		int v=e.from();
		adj[v].InQueue(e);
		E++;
	}
	
	//获取由顶点v指出的所有边
	public Queue<DirectedEdge> adj(int v){
		return adj[v];
	}
	
	//获取加权有向图的所有边
	public Queue<DirectedEdge> Edges(){
		//遍历图中的每一个顶点,得到该顶点的邻接表,遍历得到每一条边,添加到队列中返回即可
		Queue<DirectedEdge> allEdges=new Queue<>();
		for(int v=0;v<V;v++){
			for(DirectedEdge edge:adj[v]){
				allEdges.InQueue(edge);
			}
		}
		return allEdges;	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值