图的表示与基础--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();
		
	}
}
相关推荐
2401_cf1 小时前
为什么hadoop不用Java的序列化?
java·hadoop·eclipse
帮帮志1 小时前
idea整合maven环境配置
java·maven·intellij-idea
belldeep1 小时前
如何阅读、学习 Tcc (Tiny C Compiler) 源代码?如何解析 Tcc 源代码?
c语言·开发语言
LuckyTHP1 小时前
java 使用zxing生成条形码(可自定义文字位置、边框样式)
java·开发语言·python
无声旅者4 小时前
深度解析 IDEA 集成 Continue 插件:提升开发效率的全流程指南
java·ide·ai·intellij-idea·ai编程·continue·openapi
Blossom.1184 小时前
使用Python实现简单的人工智能聊天机器人
开发语言·人工智能·python·低代码·数据挖掘·机器人·云计算
da-peng-song4 小时前
ArcGIS Desktop使用入门(二)常用工具条——数据框工具(旋转视图)
开发语言·javascript·arcgis
galaxy_strive4 小时前
qtc++ qdebug日志生成
开发语言·c++·qt
Ryan-Joee5 小时前
Spring Boot三层架构设计模式
java·spring boot
TNTLWT5 小时前
Qt功能区:简介与安装
开发语言·qt