数据结构--稀疏矩阵及Java实现

一、稀疏 sparsearray 数组

1、先看一个实际的需求

  • 编写的五子棋程序中,有存盘退出和续上盘的功能。

  • 分析问题:

因为该二维数组的很多值是默认值 0,  因此记录了很多没有意义的数据.->稀疏数组

2、稀疏数组基本介绍

当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。

组的处理方法是:

        ①记录数组一共有几行几列,有多少个不同的值

        ②把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

3、稀疏数组举例说明

二、应用实例

  1. 使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等)
  2. 把稀疏数组存盘,并且可以从新恢复原来的二维数组数
  3. 整体思路分析

​​​​​

三、代码实现

package com.atguigu.sparsearray;public class SparseArray {public static void main(String[] args) {// 创建一个原始的二维数组 11 * 11// 0: 表示没有棋子, 1 表示 黑子 2 表蓝子int chessArr1[][] = new int[11][11];chessArr1[1][2] = 1;chessArr1[2][3] = 2;chessArr1[4][5] = 2;// 输出原始的二维数组System.out.println("原始的二维数组~~");for (int[] row : chessArr1) {for (int data : row) {System.out.printf("%d\t", data);}System.out.println();}// 将二维数组 转 稀疏数组的思// 1. 先遍历二维数组 得到非0数据的个数int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (chessArr1[i][j] != 0) {sum++;}}}// 2. 创建对应的稀疏数组int sparseArr[][] = new int[sum + 1][3];// 给稀疏数组赋值sparseArr[0][0] = 11;sparseArr[0][1] = 11;sparseArr[0][2] = sum;// 遍历二维数组,将非0的值存放到 sparseArr中int count = 0; //count 用于记录是第几个非0数据for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (chessArr1[i][j] != 0) {count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = chessArr1[i][j];}}}// 输出稀疏数组的形式System.out.println();System.out.println("得到稀疏数组为~~~~");for (int i = 0; i < sparseArr.length; i++) {System.out.printf("%d\t%d\t%d\t\n", sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);}System.out.println();//将稀疏数组 --》 恢复成 原始的二维数组/**  1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的  chessArr2 = int [11][11]2. 在读取稀疏数组后几行的数据,并赋给 原始的二维数组 即可.*///1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];//2. 在读取稀疏数组后几行的数据(从第二行开始),并赋给 原始的二维数组 即可for(int i = 1; i < sparseArr.length; i++) {chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];}// 输出恢复后的二维数组System.out.println();System.out.println("恢复后的二维数组");for (int[] row : chessArr2) {for (int data : row) {System.out.printf("%d\t", data);}System.out.println();}}}

 喜欢的话点个关注吧!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记本电脑如何安装爱快软路由

环境&#xff1a; dell3490 笔记本 装机U盘 问题描述&#xff1a; 笔记本电脑如何安装爱快软路由 解决方案&#xff1a; 1.电脑bios关闭 安全启动 2.下载官网镜像 3.UEFI引导 在PE下面 新建esp分区300M 把系统镜像里面全部文件&#xff0c;提取到这个分区 最后&…

[Knowledge Distillation]论文分析:Distilling the Knowledge in a Neural Network

文章目录 一、完整代码二、论文解读2.1 介绍2.2 Distillation2.3 结果 三、整体总结 论文&#xff1a;Distilling the Knowledge in a Neural Network 作者&#xff1a;Geoffrey Hinton, Oriol Vinyals, Jeff Dean 时间&#xff1a;2015 一、完整代码 这里我们使用python代码进…

nodejs+vue+微信小程序+python+PHP的微博网络舆情分析系统-计算机毕业设计推荐

2.3.1 功能性分析 按照微博网络舆情分析系统的角色&#xff0c;我划分为了微博用户管理模块和管理员管理模块这三大部分。 微博用户管理模块&#xff1a;&#xff08;1&#xff09;用户登录&#xff1a;用户登录微博网络舆情分析系统 &#xff1b;用户对个人信息的增删改查&…

【数字电路】MacBook使用iverilog进行数字电路仿真

安装流程 在终端中用brew包管理工具进行安装仿真工具&#xff1a; 编译verilog代码&#xff1a; brew install icarus-verilog编译verilog代码&#xff1a; brew install verilatorMacOS系统显示UNIX GUI brew install xquartz可视化仿真波形图&#xff1a; brew install gtk…

Hadoop和Spark的区别

Hadoop 表达能力有限。磁盘IO开销大&#xff0c;延迟度高。任务和任务之间的衔接涉及IO开销。前一个任务完成之前其他任务无法完成&#xff0c;难以胜任复杂、多阶段的计算任务。 Spark Spark模型是对Mapreduce模型的改进&#xff0c;可以说没有HDFS、Mapreduce就没有Spark。…

VR智慧眼:为各行业打造3D数字化业务协同平台

自改革开放以来&#xff0c;城镇化建设一直在不断推进实施&#xff0c;如今各城市化速度虽然在不断加快&#xff0c;但随之而来的部分城市开始出现资源短缺、环境污染、交通拥堵、安全隐患等问题&#xff0c;因此为了满足智慧城市大型区域场景数字化升级需求&#xff0c;助力区…

Jrebel 在 Idea 2023.3中无法以 debug 的模式启动问题

Jrebel 在 Idea 2023.3中无法以 debug 的模式启动问题 Idea 在升级了2023.3以后&#xff0c;Jrebel 无法以 debug 的模式启动&#xff0c;找了半天&#xff0c;最后在插件主页的评论区找到了解决方案 特此记录一下

linux系统的u盘/mmc/sd卡等的支持热插拔和自动挂载行为

1.了解mdev mdev是busybox自带的一个简化版的udev。udev是从Linux 2.6 内核系列开始的设备文件系统&#xff08;DevFS&#xff09;的替代品&#xff0c;是 Linux 内核的设备管理器。总的来说&#xff0c;它取代了 devfs 和 hotplug&#xff0c;负责管理 /dev 中的设备节点。同时…

RG0标准全光谱LED光源—台湾旺泓防蓝光灯珠

随着LED行业照明的发展&#xff1b;以及我国儿童青少年近视综合防控工作的推进和深入&#xff0c;灯具光源的重要性越发凸显&#xff0c;能为人类提供更高光色品质、更舒适健康的光环境的照明技术成为研究突破方向。 全光谱LED光源的出现&#xff0c;拓展了光谱可能性&#xf…

Springboot的火车票订票系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; Springboot的火车票订票系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#…

OpenAI发布了一份提示工程指南(Prompt Engineering Guide)

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 Open AI 发布了一份很棒的提示工程指南。 以下是在 GPT-4 使用提示时获得更好结果的 6 种策略的总结:

使用GPT开发食堂采购账单

原始系统中&#xff0c;只有采购量和消耗量&#xff0c;需要添加“余”列&#xff0c;并自动计算的余量 具体实现通过查询GPT获得&#xff1a; 提问&#xff1a; 使用antdesign vue的<a-table>组件做一个互动表&#xff0c;每行输入a和b两值&#xff0c;计算cab&#xf…