图的表示和存储结构

图的表示:两种表示方法 邻接矩阵和邻接表

图的表示和存储结构_第1张图片

无向图

图的表示和存储结构_第2张图片

有向图

图的表示和存储结构_第3张图片

图的权

图的表示和存储结构_第4张图片

连通图

图的表示和存储结构_第5张图片

图的表示和存储结构_第6张图片

图的存储结构

图的表示和存储结构_第7张图片

1、邻接矩阵存储

图的表示和存储结构_第8张图片
图的表示和存储结构_第9张图片
图的表示和存储结构_第10张图片
图的表示和存储结构_第11张图片

浪费邻接矩阵

图的表示和存储结构_第12张图片

2、邻接表存储

2.1、无向图的邻接表

图的表示和存储结构_第13张图片

2.2、有向图的邻接表

图的表示和存储结构_第14张图片

2.3、带权值的邻接表

图的表示和存储结构_第15张图片

代码

1、图的基本操作

package com.dn.dijstra;

import java.util.LinkedList;

public class Graph {
    private int vertexSize;//顶点数量
    
    public int getVertexSize() {
        return vertexSize;
    }


    public void setVertexSize(int vertexSize) {
        this.vertexSize = vertexSize;
    }

    private int [] vertexs;//顶点数组
    private int[][]  matrix;
    public int[][] getMatrix() {
        return matrix;
    }


    public void setMatrix(int[][] matrix) {
        this.matrix = matrix;
    }

    private static final int MAX_WEIGHT = 1000;
    private boolean [] isVisited;
    public Graph(int vertextSize){
        this.vertexSize = vertextSize;
        matrix = new int[vertextSize][vertextSize];
        vertexs = new int[vertextSize];
        for(int i = 0;i0&&matrix[index][j]0&&matrix[v][j] queue = new LinkedList();
        System.out.println("访问到:"+i+"顶点");
        isVisited[i] = true;
        queue.add(i);//第一次把v0加到队列
        while(!queue.isEmpty()){
            u = (Integer)(queue.removeFirst()).intValue();
            w = getFirstNeighbor(u);
            while(w!=-1){
                if(!isVisited[w]){
                    System.out.println("访问到了:"+w+"顶点");
                    isVisited[w] = true;
                    queue.add(w);
                }
                w = getNextNeighbor(u, w);
            }
        }
    }

/**
 * prim 普里姆算法
 */
    public void prim(){
        int [] lowcost = new int[vertexSize];//最小代价顶点权值的数组,为0表示已经获取最小权值
        int [] adjvex = new int[vertexSize];//放顶点权值
        int min,minId,sum = 0;
        for(int i = 1;i0){
                    min = lowcost[j];
                    minId = j;
                }
            }
            System.out.println("顶点:"+adjvex[minId]+"权值:"+min);
            sum+=min;
            lowcost[minId] = 0;
            for(int j = 1;j

你可能感兴趣的:(图的表示和存储结构)