图的创建、遍历
1、图的基本介绍
当我们需要表示多对多的关系时,我们就需要图
图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wFqmIgFh-1617541970180)(http://tc.glulu7.cn/2021-04-04-083621.png)]
2、图的表示方法
2.1、邻接矩阵
- 邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵是的row和 col表示的是1…n个点,其中0表示没有连接,1表示有连接
2.2、邻接表
-
邻接矩阵需要为每个顶点都分配 n 个边的空间,其实有很多边都是不存在,会造成空间的一定损失.
-
邻接表的实现只关心存在的边,不关心不存在的边。因此没有空间浪费,邻接表由数组+链表组成
3、图的代码实现
3.1、要实现图的结构
3.2、思路分析
(1) 存储顶点用 String类型,并使用 ArrayList
(2) 保存矩阵用二维数组 edges
3.3、代码实现
package com.yishuai.Graph;
import java.util.ArrayList;
import java.util.Arrays;
/**
* @author yishuai
* @description 图结构的创建(邻接矩阵)
* @date 2021/4/4 4:45 下午
*/
public class GraphCreate {
public static void main(String[] args) {
int sum = 5;
String[] vertex = {
"A", "B", "C", "D", "E"};
Graph graph = new Graph(sum);
//指明图的顶点
for(String top : vertex) {
graph.insertVertex(top);
}
//指明相连的顶点
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);
//显示邻接矩阵
System.out.println("邻接矩阵为:");
graph.showGraph();
}
}
class Graph {
ArrayList<String> vertexList;
int[][] edges;
int numOfEdges;