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));
		}
	}
	
}
相关推荐
黄昏ivi30 分钟前
电力系统最小惯性常数解析
算法
独家回忆3641 小时前
每日算法-250425
算法
烁3471 小时前
每日一题(小白)模拟娱乐篇33
java·开发语言·算法
Demons_kirit1 小时前
LeetCode 2799、2840题解
算法·leetcode·职场和发展
软行1 小时前
LeetCode 每日一题 2845. 统计趣味子数组的数目
数据结构·c++·算法·leetcode
永远在Debug的小殿下1 小时前
查找函数【C++】
数据结构·算法
我想进大厂2 小时前
图论---染色法(判断是否为二分图)
数据结构·c++·算法·深度优先·图论
油泼辣子多加2 小时前
【风控】稳定性指标PSI
人工智能·算法·金融
Yhame.2 小时前
【使用层次序列构建二叉树(数据结构C)】
c语言·开发语言·数据结构
雾月553 小时前
LeetCode 1292 元素和小于等于阈值的正方形的最大边长
java·数据结构·算法·leetcode·职场和发展