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));
		}
	}
	
}
相关推荐
代码AC不AC6 分钟前
【数据结构】队列
c语言·数据结构·学习·队列·深度讲解
林泽毅6 分钟前
SwanLab x EasyR1:多模态LLM强化学习后训练组合拳,让模型进化更高效
算法·llm·强化学习
小林熬夜学编程8 分钟前
【高并发内存池】第八弹---脱离new的定长内存池与多线程malloc测试
c语言·开发语言·数据结构·c++·算法·哈希算法
刚入门的大一新生14 分钟前
归并排序延伸-非递归版本
算法·排序算法
独好紫罗兰19 分钟前
洛谷题单3-P1980 [NOIP 2013 普及组] 计数问题-python-流程图重构
开发语言·python·算法
独好紫罗兰24 分钟前
洛谷题单3-P1009 [NOIP 1998 普及组] 阶乘之和-python-流程图重构
开发语言·python·算法
曦月逸霜35 分钟前
蓝桥杯高频考点——高精度(含C++源码)
c++·算法·蓝桥杯
ゞ 正在缓冲99%…1 小时前
leetcode152.乘积最大子数组
数据结构·算法·leetcode
闯闯爱编程1 小时前
数组与特殊压缩矩阵
数据结构·算法·矩阵
秋风战士2 小时前
通信算法之255:无人机频谱探测设备技术详解
算法·无人机