图的表示与基础--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();
		
	}
}
相关推荐
唐青枫14 小时前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马15 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户37215742613515 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户37215742613515 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454751 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
东坡白菜1 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫1 天前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
wsaaaqqq1 天前
roudan:自由选择实体、灵活操作数据、快速写入数据库的 Java 框架
java
plainGeekDev2 天前
null 判断 → Kotlin 可空类型
android·java·kotlin
糖拌西瓜皮2 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js