图

图:和树相似,有一个固定的形状,由物理或抽象的问题来决定的

邻接:如果两个顶点被同一条边连接

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

连通图和非连通图:至少有一条路径可以连接所有的顶点,则为连通图,否则为非连通图

有向图无向图:边是有方向的为有向图A->B,B!->A

                          边是无方向的为无向图A<——>B

带权图:边被赋予了权值,权值为一个数字,可以代表两个顶点的物理距离,或者一个顶点到另一个顶点的时间等

下图是一个有向图:

用两种方式表示

1、邻接表表示

 2、邻接矩阵表示

 ABCDEF
A111111
B111000
C111000
D101110
E101011
F10 011

对角线是自己连接自己,肯定可以连接,可以写1或0,其余位置,可以连接写1,无法连接为0

定义顶点类


/**
 * 顶点类
 * @author Administrator
 *
 */
public class Vertex {
    private char label;
    
    public Vertex(char label) {
        this.label = label;
    }
}

定义图


/**
 * 图
 * @author Administrator
 *
 */
public class Graph {
    //顶点数组
    private Vertex[] vertexList;
    //邻接矩阵
    private int[][] adjMat;
    //顶点的最大数目
    private int maxSize;
    //当前顶点
    private int nVertex;
    
    public Graph() {
        vertexList = new Vertex[maxSize];
        adjMat = new int[maxSize][maxSize];
        for(int i = 0; i < maxSize; i++) {
            for(int j = 0; j < maxSize; j++) {
                adjMat[i][j] = 0;
            }
        }
        nVertex = 0;
    }
    
    /**
     * 添加顶点
     */
    public void addVertex(char label) {
        vertexList[nVertex++] = new Vertex(label);
    }
    
    /**
     * 添加边
     */
    public void addEdge(int start,int end) {
        adjMat[start][end] = 1;
        adjMat[end][start] = 1;
    }
    
}

 

进行测试

 

public class TestGraph {
    public static void main(String[] args) {
        Graph g = new Graph();
        g.addVertex('A');
        g.addVertex('B');
        g.addVertex('C');
        
        g.addEdge(0, 1);
        g.addEdge(0, 2);
        g.addEdge(1, 2);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值