图的基本概念

一:什么是图

图是一种和树相像的数据结构,通常有一种固定的形状,这是由物理或抽象的问题来决定的
图1

二:邻接

如果两个顶点被同一条边连接,就称这两个顶点是邻接的

1.邻接表
顶点该顶点连接的其他顶点
AB->C->D
BA->C
CA->B
DA->E
ED
2.邻接矩阵
ABCDE
A11110
B11100
C11100
D10011
E00011

注:1代表两个顶点可以连接,0代表两个顶点不可以连接,斜向代表相同顶点之间,可以使用1/0代表

三:路径

路径是从一个顶点到另一个顶点经过的边的序列

四:连通图和非连通图

至少有一条路径可以连接所有的顶点,那么就是连通图,否则就是非连通图

五:有向图和无向图

有向图: 有方向,只能从A->B,而不能从B->A
无向图:没有方向,可以从A->B,也可以 从B->A

六:带权图

在有些图中,边被赋予了一个权值,权值是一个数字,可以代表两个顶点之间的距离,或者是一个顶点到另一个顶点的时间等等.

七:代码实现

1.创建顶点类
//顶点类
public class Vertex {
    //顶点名称
    private char label;

    public Vertex( char label){
        this.label = label;
    }
}

2.创建图类
//图
public class Graph {
    //顶点数组
    private Vertex[] vertexList;
    //邻接矩阵,二维数组
    private int[][] arr;
    //顶点最大数量
    private int maxSize;
    //已添加顶点
    private int vt;

    public Graph(){
        //初始化顶点数组
        vertexList = new Vertex[maxSize];
        //初始化邻接矩阵
        arr = new int[maxSize][maxSize];
        //初始化值
        for (int i= 0;i<maxSize;i++){
            for (int j= 0;j<maxSize;j++){
                //代表所有的边都不相连
                arr[i][j] = 0;
            }
        }
        vt = 0;
    }

    //添加顶点
    public void addVertex(char label){
        //往顶点数组内添加顶点
        vertexList[vt++] = new Vertex(label);
    }

    //添加边
    public void addEdge(int start , int end){
        //从 start 到 end 连通
        arr[start][end] = 1;
        //从 end 到 start 自然也连通
        arr[end][start] = 1;
    }
}

3.测试
public class Test {
    public static void main(String[] args) {

        //添加顶点
        Graph graph = new Graph();
        graph.addVertex('A');
        graph.addVertex('B');
        graph.addVertex('C');

        //添加边
        graph.addEdge(0,1);
        graph.addEdge(0,2);
        graph.addEdge(1,2);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值