小工具知识网

当前位置: 首页 > 行业知识 > Java实现图论的基本使用

行业知识

Java实现图论的基本使用

2026-11-01 08:36:14 来源:互联网转载

���这里主要写代码,定义等参考图论基础和表示 | 菜鸟教程

()
一、邻接矩阵代码实现
public class AdjacencyMatrix {    private int n;//节点数    private int m;//边数    private boolean directed;//是否为有向图    private int[][] data;//图数据    // 构造一个没有边的邻接矩阵    public AdjacencyMatrix(int n, boolean directed) {        // g初始化为n*n的布尔矩阵, 每一个data[i][j]均为0, 表示没有任何边,权值为0        // 为非零正整数时表示有边且边的权值为该值        assert n>=0;        this.n = n;        this.directed = directed;        this.m=0;        data=new int[n][n];    }    //判断v到w是否有边    private boolean hasEdge(int v,int w){        assert v>=0 && v=0 && w0;    }    //给v到w添加边和权值    private void addEdge(int v,int w,int weight){        assert v>=0 && v=0 && w= 0 && v  
二、邻接表代码实现
public class AdjacencyList {    private int n;//节点数    private int m;//边数    private boolean directed;//是否为有向图    //Vector是线程安全的可变数组    private Vector[] data;    public AdjacencyList(int n, boolean directed) {        this.n = n;        this.directed = directed;        data =  new Vector[n];        for (int i=0;i=0 && v=0 && w= 0 && start = 0 && end  ");        }    }}
五、广度优先遍历与最短路径

(Breadth First Search,广度优先搜索,又名宽度优先搜索),与深度优先算法在一个结点“***磕到底“的思维不同,广度优先算法关注的重点在于每一层的结点进行的下一层的访问。类似于二叉树或堆的层序遍历,BFS的核心就是要把当前在哪作为一个状态存储,并将这个状态交给队列进行入队操作

public class BFS {    AdjacencyMatrix matrix;    private int nodeNum;    private int start;//起点    private boolean[] visited;//记录dfs的过程中节点是否被访问    private int[] last;// 记录路径, last[i]表示查找的路径上i的上一个节点    private int[] order;// 记录路径中节点的次序。order[i]表示i节点在路径中的次序。    public BFS(AdjacencyMatrix matrix, int start) {        this.matrix = matrix;        this.start = start;        this.nodeNum = matrix.nodeNum();        assert start >= 0 && start  ");        }    }    // 查看从s点到w点的最短路径长度    // 若从s到w不可达,返回-1    public int length(int w){        assert w >= 0 && w     

上一篇:单位邮箱怎么申请?

下一篇:云服务器怎么保存密码视频?