数据结构:邻接矩阵与邻接表

news2024/11/29 22:54:10
模型图

邻接矩阵

用于反应图中任意两点之间的关联,用二维数组表示比较方便

以行坐标为起点,列坐标为终点如果两个点之间有边,那么标记为绿色,如图:

适合表示稠密矩阵  

 

邻接表

用一维数组 + 链表的形式表示,以数组下标作为起点,链表中的每个节点作为终点形成的邻接表, 如图:

                                                         适合表示稀疏矩阵

 

Java代码实现
邻接矩阵

 

public class AdjacentMatrix {
    private static Scanner scanner=new Scanner(System.in);  //扫描器
    public static void main(String[] args) {
        System.out.println("------图转换为邻接矩阵------");
        System.out.println("请输入顶点的数量:");
        int vertex_count= scanner.nextInt();
        //开辟邻接矩阵
        boolean[][]adjacentMatrix=new boolean[vertex_count][vertex_count];
        //初始化矩阵
        for(int start=0;start<vertex_count;start++)
        {
            for(int end=0;end<vertex_count;end++)
            {
                adjacentMatrix[start][end]=false;
            }
        }
        //获取边
        System.out.println("请输入边的数量:");
        int edge_count=scanner.nextInt();

        System.out.println("请输入这些边的起点和终点,如(start end):");
        for(int i=0;i<edge_count;i++)
        {
            int start= scanner.nextInt();
            int end= scanner.nextInt();
            //填充边
            adjacentMatrix[start][end]=true;
        }

        //打印输入结果
        System.out.println("所有边如下:");
        for (int start=0;start<vertex_count;start++)
        {
            for(int end=0;end<vertex_count;end++)
            {
                if(adjacentMatrix[start][end]==true)
                    System.out.println(start+"->"+end);
            }
        }

    }
}
测试
//输入:
------图转换为邻接矩阵------
请输入顶点的数量:
4
请输入边的数量:
5
请输入这些边的起点和终点,如(start end):
2 0
2 1
3 0
3 1
0 1
    
//输出:    
所有边如下:
0->1
2->0
2->1
3->0
3->1

进程已结束,退出代码为 0
 邻接表
public class AdjacentList {
    private static class Edge{
        public Integer endId;
        public Edge nextEdge;

        public Edge(Integer endId) {
            this.endId = endId;
            this.nextEdge=null;
        }

        public Edge(Integer endId, Edge nextEdge) {
            this.endId = endId;
            this.nextEdge = nextEdge;
        }
    }
    private static Scanner scanner=new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("----------图转换为邻接表----------");
        System.out.println("请输入顶点的数量:");
        int vertex_count= scanner.nextInt();
        Edge[]adjacentList=new Edge[vertex_count];
        System.out.println("请输入边的数量:");
        int edge_count= scanner.nextInt();
        System.out.println("请输入这些边:");
        for(int i=0;i<edge_count;i++)
        {
            int start= scanner.nextInt();
            int end= scanner.nextInt();
            if(adjacentList[start]==null)
                adjacentList[start]=new Edge(end);
            else
                adjacentList[start].nextEdge=new Edge(end,adjacentList[start].nextEdge);
        }

        System.out.println("邻接表如下:");
        for (int i = 0; i < adjacentList.length; i++)
        {
            System.out.print("start:"+i+" end:");
            for(Edge e=adjacentList[i];e!=null;e=e.nextEdge)
            {
                System.out.print("->"+e.endId);
            }
            System.out.println();
        }

    }
}
测试

 

//输入:
----------图转换为邻接表----------
请输入顶点的数量:
4
请输入边的数量:
5
请输入这些边:
2 0
2 1
3 0
3 1
0 1
    
//输出:    
邻接表如下:
start:0 end:->1
start:1 end:
start:2 end:->0->1
start:3 end:->0->1

进程已结束,退出代码为 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1166021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day02-Ant Design以及Ant Design Pro入门

课程简介 ReactJS入门&#xff0c;Model层 Ant Design 入门 Ant Design Pro 入门 1、ReactJS入门 1.1、Model 1.1.1、分层 上图中&#xff0c;左侧是服务端代码的层次结构&#xff0c;由 Controller 、 Service 、 Data Access 三层组成服务端系统&#xff1a; Contro…

一分钟生成PPT,利用人工智能快速提高办公效率(无需第三方插件)

人工智能技术的发展正以惊人的速度改变着我们的世界&#xff0c;今天给大家介绍下利用ChatGPT快速生成PPT的方法&#xff0c;它能够帮助你一键生成PPT内容和漂亮的PPT文档&#xff0c;无需繁琐的设计和排版&#xff0c;只需要与ChatGPT交流&#xff0c;你就能轻松拥有一份令人赞…

社区论坛在线交流网站系统源码+SEO优化 带前后端完整搭建教程

大家好&#xff0c;今天罗峰来给大家分享一款社区论坛在线交流网站系统源码。社区论坛在线交流在当下时时代还是很火的。现在人们对于在线交流和互动的需求不断增加。社区论坛作为一种传统的在线交流方式&#xff0c;仍然有着广泛的市场需求和用户群体。然而&#xff0c;现有的…

redis1之安装redis,启动,常用数据结构

目录 redis安装与启动、常见数据结构 启动 Redis客户端 数据结构与常见的命令 redis的通用命令 String类型的用法 Hash命令的用法 List命令 Set命令 SortedSet类型用法 redis安装与启动、常见数据结构 1&#xff0c;在linux上安装上gcc的依赖&#xff0c;我这里是centos7.6…

为什么边缘计算是能源行业缺失的一环

关键要点 展望未来&#xff0c;边缘计算将使能源部门能够更好地应对不断增长的能源需求的挑战&#xff0c;提高资源利用率&#xff0c;并实现更可持续的能源生态系统。 能源行业正在经历重大变革&#xff0c;因为它面临着许多挑战&#xff0c;例如整合可再生能源、电力需求激增…

thinkPHP5怎么打开页面调试,查看网页运行时间

开启trace 在config.php中找到 ‘app_trace’ > false, 修改为&#xff1a; ‘app_trace’ > true,

中国统计年鉴,覆盖2016-2022年数据,超全数据一览!

今天分享一个超详细中国统计年鉴&#xff0c;覆盖2016-2022年数据&#xff0c;包含多方面数据及指标&#xff0c;需要可自取 网站搜索“citybox城市沙盒”或同名wechat订阅号可自行获取 数据信息&#xff1a; 数据名称: 中国统计年鉴 数据格式: Html、Excel 数据时间: 20…

chromedp库编写程序

步骤1&#xff1a;首先&#xff0c;我们需要导入chromedp库&#xff0c;以便使用它来下载网页内容。 import chromedp 步骤2&#xff1a;然后&#xff0c;我们需要创建一个函数&#xff0c;该函数接受一个URL作为参数&#xff0c;并使用chromedp库下载该URL的内容。 func do…

有什么好用的日常事务管理软件?的修APP对日常管理有什么帮助?

在快节奏的现代生活中&#xff0c;我们每天都要面对各种各样的工作任务和琐事。有时候&#xff0c;我们可能会因为忘记重要事项或者没有规划好时间而导致工作效率低下。为了解决这个问题&#xff0c;我为大家推荐一款日常管理神器——的修APP。   的修APP是一款简单易用的日常…

InfiniBand 的前世今生

今年&#xff0c;以 ChatGPT 为代表的 AI 大模型强势崛起&#xff0c;而 ChatGPT 所使用的网络&#xff0c;正是 InfiniBand&#xff0c;这也让 InfiniBand 大火了起来。那么&#xff0c;到底什么是 InfiniBand 呢&#xff1f;下面&#xff0c;我们就来带你深入了解 InfiniBand…

Java——并发编程(CAS、Lock和AQS)

1、Java Concurrent API 中的 Lock 接口(Lock interface)是什么&#xff1f;对比同步它有什么优势&#xff1f; 答&#xff1a;Lock 接口比同步方法和同步块提供了更具扩展性的锁操作。他们允许更灵活的结构&#xff0c;可以具有完全不同的性质&#xff0c;并且可以支持多个相…

Scala中类的继承、抽象类和特质

1. 类的继承 1.1 Scala中的继承结构 Scala 中继承关系如下图&#xff1a; Any 是整个继承关系的根节点&#xff1b; AnyRef 包含 Scala Classes 和 Java Classes&#xff0c;等价于 Java 中的 java.lang.Object&#xff1b; AnyVal 是所有值类型的一个标记&#xff1b; Nul…

AI:51-基于深度学习的电影评价

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

渗透测试工具(AntSword)

软件安装 蚁剑渗透测试工具分为AntSword-Loader和antSword两部分 文件下载&#xff1a; AntSword-Loader下载地址&#xff1a;GitHub - AntSwordProject/AntSword-Loader: AntSword 加载器 antSword下载地址&#xff1a;Releases AntSwordProject/antSword GitHub 使用&a…

公司内网知识问答库系统源码 完全开源可二次开发 带完整搭建教程

随着公司规模的扩大和业务复杂性的增加&#xff0c;员工需要更快更有效地获取和共享知识。一个内部的知识问答库系统可以帮助公司提高员工的工作效率和知识管理水平。 有效的内部沟通是公司成功的关键因素之一。通过创建一个内部的知识问答平台&#xff0c;可以鼓励员工之间的…

入门指南|机器人流程自动化(RPA)在数字营销中的8大应用

虽然现在的话题度不及ChatGPT&#xff0c;但近两年最火的MarTech工具非RPA莫属。今天我们就来看看&#xff1a;资本宠儿、号称世界500强中超过70%的企业都在使用、老板心中最佳员工RPA到底是什么&#xff1f;以及在营销与运营中有哪些应用&#xff1f; 01 RPA是什么&#xff1f…

Uni-App 快捷登录

uniapp 实现一键登录前置条件: 开通uniCloud, 开通一键登录功能参考的文档 : 官网 - 一键登录uniapp指南 : https://uniapp.dcloud.net.cn/univerify.html#%E6%A6%82%E8%BF%B0 官网 - 一键登录开通指南 : https://ask.dcloud.net.cn/article/37965 官网 - unicloud使用指南 htt…

如何使用JDBC操作数据库?一文带你吃透JDBC规范

文章目录 1. 前言2. JDBC 概述2.1 概念2.2 优点 3. JDBC 快速入门4. JDBC API详解4.1 DriverManager4.1.1 注册驱动4.1.2 获取连接 4.2 Connection4.2.1 获取执行sql的对象4.2.2 事务管理 4.3 Statement4.4 ResultSet4.5 PreparedStatement4.5.1 sql注入问题4.5.2 preparedStat…