图的表示与基础--Java

1.图的基础知识

该图片来自于: https://b23.tv/KHCF2m6

2.稀疏图与稠密图

G(V,E):V顶点个数,E边的个数

稀疏图:E<<V² 一般用邻接表表示(数组+链表)

稠密图:E接近V² 一般用邻接矩阵表示(二维数组)

3.图的两种表示

邻接表法:

java 复制代码
class Graph {
    int[][] matrix;
    int size;

    public Graph(int size) {
        this.size = size;
        matrix = new int[size][size];
    }

    public void addEdge(int from, int to) {
        matrix[from][to] = 1;
        matrix[to][from] = 1; // 如果是无向图,需要加上这一行
    }
    
    public void printGraph() {
		for (int i = 0; i < matrix.length; i++) {
			for (int j = 0; j < matrix[i].length; j++) {
				System.out.print(matrix[i][j]+"  ");
			}
			System.out.println();
		}
	}
    
    public static void main(String[] args) {
		Graph graph = new Graph(5);
		graph.addEdge(0, 1);
		graph.addEdge(0, 2);
		graph.addEdge(0, 3);
		graph.addEdge(0, 4);
		
		graph.addEdge(1, 2);
		graph.addEdge(1, 3);
		graph.addEdge(1, 4);
		
		graph.addEdge(2, 3);
		graph.addEdge(2, 4);
		
		graph.addEdge(3, 4);
		graph.printGraph();
	}

邻接矩阵法:

java 复制代码
public class Graph2 {
    int V;	//图的顶点个数
    LinkedList<Integer> adjListArray[];//数组链表:数组位置存储的是链表,链表里的元素是Integer

    Graph2(int V) {
        this.V = V;

        adjListArray = new LinkedList[V];

        for (int i = 0; i < V; i++) {
            adjListArray[i] = new LinkedList<>();
        }
    }

    void addEdge(int src, int dest) {//添加边
        adjListArray[src].add(dest);
        adjListArray[dest].add(src); // 如果是无向图,需要加上这一行
    }

    void printGraph() {
        for (int v = 0; v < V; v++) {
            System.out.println("Adjacency list of vertex " + v);
            System.out.print("head");
            for (Integer pCrawl : adjListArray[v]) {
                System.out.print(" -> " + pCrawl);
            }
            System.out.println("\n");
        }
    }
    
    public static void main(String[] args) {
		Graph2 graph2 = new Graph2(5);
		System.out.println("顶点个数为:"+graph2.V);
		
		graph2.addEdge(0, 1);
		graph2.addEdge(0, 2);
		graph2.addEdge(0, 3);
		graph2.addEdge(0, 4);
		
		graph2.addEdge(1, 2);
		graph2.addEdge(1, 3);
		graph2.addEdge(1, 4);
		
		graph2.addEdge(2, 3);
		graph2.addEdge(2, 4);
		
		graph2.addEdge(3, 4);
		
		graph2.printGraph();
		
	}
}
相关推荐
LayZhangStrive10 分钟前
融360 一面
java·面试·后端开发
城管不管35 分钟前
重生——第十次面试之开源中国一面挂
java·linux·开发语言·算法·面试·职场和发展·开源
Java小白笔记39 分钟前
Windows系统免软件命令激活
java·网络·人工智能·windows·ai·ai编程
爱敲键盘的猴子1 小时前
深入理解 Java HashMap
java·hashmap
霸道流氓气质1 小时前
Java开发者AI编程常用MCP、Skills、Rules全景汇总
java·开发语言·ai编程
天涯醉青楼1 小时前
Spring Boot 接口返回 Bean 时字段名“变形”的深度剖析与解决方案
java
zoujiahui_20181 小时前
Python 包与环境管理工具 uv
开发语言·python·uv
步行cgn1 小时前
MyBatis 高级映射与延迟加载完全指南
java·tomcat·mybatis
thefool1122661 小时前
从中序与后序遍历序列构造二叉树
java
吴声子夜歌1 小时前
Java面试题——JVM(二)
java·开发语言·jvm