图
为什么要用到图
线性表局限于一个直接前驱和一个直接后继的关系
树也只能有一个直接前驱也就是父节点
当我们需要表示多对多的关系时,这里我们就用到了图
也就是说图可以代表多对多之间的关系
图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。结点也可以称为顶点。
常用概念
1.顶点 就是我们的节点
2.边 我们相邻节点的连线
3.路径 节点之间有多少种方式连接
4.无向图
5.有向图 边有方向
6.带权图 带值的图
表示方式
1.二维数组表示法 邻接矩阵
2.链表表示 邻接表
我们发现很多地方都是无意义的,比较浪费空间
快速入门
代码
package 图;
import java.util.ArrayList;
import java.util.Arrays;
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 void insertVertex(String vertex){
vertexList.add(vertex);
}
//添加边