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));
		}
	}
	
}
相关推荐
Aaron158813 分钟前
AD9084和Versal RF系列具体应用案例对比分析
嵌入式硬件·算法·fpga开发·硬件架构·硬件工程·信号处理·基带工程
laocooon52385788613 分钟前
插入法排序 python
开发语言·python·算法
wuhen_n1 小时前
LeetCode -- 1:两数之和(简单)
javascript·算法·leetcode·职场和发展
林shir2 小时前
Java基础1.7-数组
java·算法
Jeremy爱编码2 小时前
leetcode课程表
算法·leetcode·职场和发展
甄心爱学习3 小时前
SVD求解最小二乘(手写推导)
线性代数·算法·svd
努力学算法的蒟蒻3 小时前
day46(12.27)——leetcode面试经典150
算法·leetcode·面试
Blockbuater_drug3 小时前
InChIKey: 分子的“化学身份证”,从哈希原理到全球监管合规(2025)
算法·哈希算法·inchikey·rdkit·分子表达·化学信息学
橙汁味的风3 小时前
2EM算法详解
人工智能·算法·机器学习
维构lbs智能定位4 小时前
北斗卫星导航定位从核心框架到定位流程详解(一)
算法·北斗卫星导航定位系统