JAVA算法:计算有向图中顶点的依赖和

本文介绍了如何使用JAVA算法计算有向图中每个顶点的依赖项之和。通过分析有向图的边,确定节点的依赖关系,例如节点A依赖于C和D,依赖项为2;节点B依赖于C,依赖项为1;节点C无依赖项,依赖项为0;节点D依赖于C,依赖项为1。总依赖项之和为4。
摘要由CSDN通过智能技术生成

JAVA算法:计算图中顶点的依赖和

给出了一个具有n个节点的有向连通图。如果从U到V有一个边,那么U依赖于V

我们的任务是找出每个节点的依赖项之和。

例如下图中:

对于节点A,从A出发的边有两条,A到C,和A到D;则根据题目描述的定义,A依赖于C和D,则依赖项为2;

对于节点B,从B出发的边有一条,B到C,则B依赖于C,依赖项为1;

对于节点C,没有从C出发的边,则依赖项为0;

对于节点D,从D出发的边有一条,D到C,则D依赖于C,依赖项为1;

上图中所有依赖项之和为:2+1+0+1 = 4


算法设计

package com.bean.algorithm.graph;

import java.util.Vector;

public class SumofDependencies {

	static void addEdge(Vector<Integer> adj[], int u, int v) {
		adj[u].addElement((v));
	}

	static int findSum(Vector<Integer> adj[], int V) {
		int sum = 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* * 基于邻接边表实现图的顶点结构 */ package dsa; public class Vertex_List implements Vertex { //变量 protected Object info;//当前顶点存放的数据元素 protected Position vPosInV;//当前顶点在所属的图的顶点表V的位置 protected List outEdges;//关联边表:存放以当前顶点为尾的所有边(的位置) protected List inEdges;//关联边表:存放以当前顶点为头的所有边(的位置) protected int status;//(在遍历图等操作过程顶点的状态 protected int dStamp;//时间标签:DFS过程顶点被发现时的时刻 protected int fStamp;//时间标签:DFS过程顶点被访问结束时的时刻 protected int distance;//到指定起点的距离:BFS、Dijkstra等算法所确定该顶点到起点的距离 protected Vertex bfsParent;//在最短距离树(BFS或BestFS)的父亲 //构造方法:在图G引入一个属性为x的新顶点 public Vertex_List(Graph G, Object x) { info = x;//数据元素 vPosInV = G.insert(this);//当前顶点在所属的图的顶点表V的位置 outEdges = new List_DLNode();//出边表 inEdges = new List_DLNode();//入边表 status = UNDISCOVERED; dStamp = fStamp = Integer.MAX_VALUE; distance = Integer.MAX_VALUE; bfsParent = null; } //返回当前顶点的信息 public Object getInfo() { return info; } //将当前顶点的信息更新为x,并返回原先的信息 public Object setInfo(Object x) { Object e = info; info = x; return e; } //返回当前顶点的出、入度 public int outDeg() { return outEdges.getSize(); } public int inDeg() { return inEdges.getSize(); } //返回当前顶点所有关联边、关联边位置的迭代器 public Iterator inEdges() { return inEdges.elements(); } public Iterator inEdgePositions() { return inEdges.positions(); } public Iterator outEdges() { return outEdges.elements(); } public Iterator outEdgePositions() { return outEdges.positions(); } //取当前顶点在所属的图的顶点集V的位置 public Position getVPosInV() { return vPosInV; } //读取、设置顶点的状态(DFS + BFS) public int getStatus() { return status; } public int setStatus(int s) { int ss = status; status = s; return ss; } //读取、设置顶点的时间标签(DFS) public int getDStamp() { return dStamp; } public int setDStamp(int s) { int ss = dStamp; dStamp = s; return ss; } public int getFStamp() { return fStamp; } public int setFStamp(int s) { int ss = fStamp; fStamp = s; return ss; } //读取、设置顶点至起点的最短距离(BFS) public int getDistance() { return distance; } public int setDistance(int s) { int ss = distance; distance = s; return ss; } //读取、设置顶点在的DFS、BFS、BestFS或MST树的父亲 public Vertex getBFSParent() { return bfsParent; } public Vertex setBFSParent(Vertex s) { Vertex ss = bfsParent; bfsParent = s; return ss; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值