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));
		}
	}
	
}
相关推荐
皮蛋sol周6 分钟前
嵌入式学习C语言(八)二维数组及排序算法
c语言·学习·算法·排序算法
森焱森30 分钟前
单片机中 main() 函数无 while 循环的后果及应对策略
c语言·单片机·算法·架构·无人机
学不动CV了30 分钟前
ARM单片机OTA解析(二)
arm开发·数据结构·stm32·单片机·嵌入式硬件
kk在加油1 小时前
Redis基础数据结构
数据结构·数据库·redis
平和男人杨争争1 小时前
机器学习12——支持向量机中
算法·机器学习·支持向量机
10岁的博客1 小时前
代码编程:一场思维与创造力的革命
开发语言·算法
IT永勇1 小时前
数据结构-栈
c语言·数据结构·嵌入式开发
Aczone281 小时前
嵌入式 数据结构学习 (六) 树、哈希表与内核链表
数据结构·学习·算法
定偶2 小时前
进制转换小题
c语言·开发语言·数据结构·算法
体系结构论文研讨会2 小时前
多项式环及Rq的含义
算法