java 数据结构- 图

表示多对多的关系时,这里我们就用到了图

图的常用概念

  1. 顶点
  2. 路径
  3. 无向图
  4. 有向图
  5. 带权图(边带权值的图也叫做网)

图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)

邻接矩阵

邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵的是用row和col来表示1......n

邻接表

1.邻接矩阵需要为每个顶点分配n个边的空间,其实有很多边都是不存在的,会造成一定的空间损失

2.邻接表的实现只关心存在的边,不关心不存在的边,因此没有空间浪费,邻接表由数据+链表组成

java 复制代码
public class Graph {
	private ArrayList<String> vertexList;//存储顶点集合
	private int[][] edges;//存储图对应的邻接矩阵
	private int numOfEdges;//表示边的数目
	public static void main(String[] args) {
		//测试
		int n=5;//节点个数
		String VertexValue[]= {"A","B","C","D","E"};
		//创建图对象
		Graph graph=new Graph(n);
		//循环添加顶点
		for(String value:VertexValue) {
			graph.insertVertex(value);
		}
		//添加边
		//A-B,A-C,B-C,B-D,B-E
		graph.insertEdge(0, 1, 1);
		graph.insertEdge(0, 2, 1);
		graph.insertEdge(1, 2, 1);
		graph.insertEdge(1, 3, 1);
		graph.insertEdge(1, 4, 1);
		//显示
		graph.showGraph();
	}
	//构造器
	public Graph(int n) {
		//初始化矩阵和vertexList
		edges=new int[n][n];
		vertexList=new ArrayList<String>(n);
		numOfEdges=0;
	}
	//图中常用方法
	//返回节点个数
	public int getNumOfVertex() {
		return vertexList.size();
	}
	//得到边的数目
	public int getNumOfEdges() {
		return numOfEdges;
	}
	//返回节点i对应的数据
	public String getValueByIndex(int i) {
		return vertexList.get(i);
	}
	//返回v1和v2对应的权值
	public int getWeight(int v1,int v2) {
		return edges[v1][v2];
	}
	//插入节点
	public void insertVertex(String vertex) {
		vertexList.add(vertex);
	}
	//添加边
	public void insertEdge(int v1,int v2,int weight) {
		edges[v1][v2]=weight;
		edges[v2][v1]=weight;
		numOfEdges++;
	}
	//显示图对应的矩阵
	public void showGraph() {
		for(int[]link:edges) {
			System.err.println(Arrays.toString(link));
		}
	}
	
}
相关推荐
CoovallyAIHub10 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
NAGNIP11 小时前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo11 小时前
半开区间和开区间的两个二分模版
算法
moonlifesudo11 小时前
300:最长递增子序列
算法
CoovallyAIHub16 小时前
港大&字节重磅发布DanceGRPO:突破视觉生成RLHF瓶颈,多项任务性能提升超180%!
深度学习·算法·计算机视觉
CoovallyAIHub16 小时前
英伟达ViPE重磅发布!解决3D感知难题,SLAM+深度学习完美融合(附带数据集下载地址)
深度学习·算法·计算机视觉
聚客AI1 天前
🙋‍♀️Transformer训练与推理全流程:从输入处理到输出生成
人工智能·算法·llm
大怪v1 天前
前端:人工智能?我也会啊!来个花活,😎😎😎“自动驾驶”整起!
前端·javascript·算法
惯导马工2 天前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农2 天前
【React用到的一些算法】游标和栈
算法·react.js