稀疏数组问题

稀疏数组

实际需求:在写五子棋的程序中,有存盘退出和续上盘的功能

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

思路分析

二维数组转稀疏数组

  1. 遍历原始的二维数组,得到有效数据的个数sum
  2. 根据sum就可以创建稀疏数组sparseArr int[sum+1] [3]
  3. 将二维数组的有效数据存入到稀疏数组

稀疏数组转原始的二维数组

  1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
  2. 在读取稀疏数组后几行的数据,并赋给原始的二维数组即可

代码实现

  1. 首先创建一个二维数组
// 创建一个原始的二维数组大小 11*11
// 0: 表示没有棋子,1表示黑子,2表示白子
int chessArr[][] = new int[11][11];
chessArr[1][2] = 1;
chessArr[2][3] = 2;
chessArr[4][5] = 2;
// 输出原始的二维数组
System.out.println("原始的二维数组");
for (int[] row : chessArr){
    for (int data : row){
        System.out.printf("%d\t",data );
    }
    System.out.println();
}
  1. 将该二维数组按照我们所说的思路进行转换变成稀疏数组
// 将二维数组转稀疏数组
// 1.先遍历二维数组 得到非0数据的个数
int sum = 0;
for (int i = 0; i < chessArr.length; i++) {
    for (int j = 0; j < chessArr[0].length; j++) {
        if (chessArr[i][j]!=0){
            sum++;
        }
    }
}
// 2.创建对应的稀疏数组
int sparseArr[][] = new int[sum+1][3];
// 给稀疏数组赋值
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
// 3.遍历二维数组,将非0的值存到稀疏数组中
int count = 0;// count用于记录是第几个非0数据
for (int i = 0; i < chessArr.length; i++) {
    for (int j = 0; j < chessArr[0].length; j++) {
        if (chessArr[i][j]!=0){
            count++;
            sparseArr[count][0]=i;
            sparseArr[count][1]=j;
            sparseArr[count][2]=chessArr[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. 将稀疏数组恢复为二维数组
// 将稀疏数组-->恢复成二维数组
//1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
int chessArr1[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
//2.在读取稀疏数组后几行的数据(从第二行开始),并赋给原始的二维数组即可
for (int i = 1; i < sparseArr.length; i++) {
    chessArr1[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
// 输出恢复后的二维数组
System.out.println();
System.out.println("恢复后的二维数组");
for (int[] row : chessArr1){
    for (int data : row){
        System.out.printf("%d\t",data );
    }
    System.out.println();
}

Original: https://blog.csdn.net/weixin_51971817/article/details/128717680
Author: 重开之Java程序员
Title: 稀疏数组问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/811873/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • python外星人颜色答案_Python-外星人

    此项目在学习Python的过程中,对照着书本所写,已成功运行。 所用的编辑器为Spyder,安装插件Pygame. 外星人及飞船图片下载链接 以下为小部分代码,完整版已上传资源。 …

    Python 2023年9月22日
    044
  • xml的学习和使用python解析读取xml文件

    XML的介绍 XML 指可扩展标记语言(EXtensible Markup Language)。 和json类似也是用于存储和传输数据,还可以用作配置文件。 类似于HTML超文本标…

    Python 2023年8月2日
    068
  • 模式识别课程educoder平台实训

    NumPy基础及取值操作 第1关:ndarray对象 第2关:形状操作 第3关:基础操作 第4关:随机数生成 第5关:索引与切片 NumPy数组的高级操作 第1关:堆叠操作 第2关…

    Python 2023年8月29日
    076
  • MyBatis —- 分页插件

    MyBatis —- 分页插件 1. 分页插件使用步骤 * a>添加依赖 b>配置分页插件 2. 分页插件的使用 1. 分页插件使用步骤 a>添加依赖…

    Python 2023年10月8日
    041
  • python+django网吧会员管理系统

    系统项目截图 本网吧管理系统主要包括三大功能模块,即管理员、会员、网管。(1)管理员模块:首页、个人中心、会员管理、网管管理、商品类型管理、商品信息管理、购买商品信息管理、呼叫网管…

    Python 2023年8月6日
    056
  • Python:如何只用十几行代码写一个程序?

    Python可以做的事情真的太多了,常见的网站开发,软件开发,爬虫,数据分析,人工智能,机器学习,量化投资,自动化办公,自动化运维,游戏开发,脚本制作,树莓派等等等等~ 今天咱们就…

    Python 2023年6月9日
    068
  • 学习NumPy

    ndarray对象中一些重要的属性 创建一个一维数组 data1=np.array([1,2,3]) 创建一个二维数组 data2=np.array([[1,2,3],[4,5,6…

    Python 2023年8月26日
    037
  • 【自动驾驶】车辆运动学模型

    文章目录 参考资料 1. 以车辆重心为中心的单车运动学模型 * 1.1 参数说明 1.2 几何关系 – 1.2.1 偏航角ψ \psi ψ的关系 1.2.1 滑移角 β…

    Python 2023年10月27日
    036
  • 数字图像处理课程作业二-车牌识别

    写在最前 这是我大学课程的数字图像处理的实验报告,代码大部分是从网上直接复制使用,小部分是我自己改写的(例如matplotlib的使用),可以直接运行。内容比较详细,但是希望大家能…

    Python 2023年10月7日
    055
  • Activity生命周期

    Activity生命周期 1.Activity状态 1.基本状态 运行,active。位于最前台,可以和用户交互的激活状态。 暂停,pause,被透明或者Dialog覆盖,此时可见…

    Python 2023年10月7日
    037
  • 使用pandas进行数据预处理实验结果即截图

    10.2 pandas数据结构 10.2.1 Series Series的字符串表现形式为:索引在左边,值在右边。如果没有为数据指定索引,就会自动创建一个0到N-1(N为数据的长度…

    Python 2023年8月20日
    058
  • pytest框架–配置文件pytest.ini使用

    pytest.ini是pytest的全局配置文件,一般放在项目的根目录下 固定的配置文件(pytest.ini),不可修改文件名 可以改变pytest的运行方式、设置配置信息、读取…

    Python 2023年9月9日
    057
  • 【SQLServer】并行的保留线程和已使用线程

    我们都知道SQL Server的并行执行。为了快速处理一个请求,SQL Server会使用多个线程来处理一个请求。并行执行涉及两个重要的参数设置:·maxdop:最大并行度·并行度…

    Python 2023年10月22日
    041
  • Prompt-Tuning——深度解读一种新的微调范式

    Prompt-Tuning——深度解读一种全新的微调范式 作者:王嘉宁 邮箱:lygwjn@126.com转载请注明出处:https://wjn1996.blog.csdn.net…

    Python 2023年9月28日
    095
  • .net版OCR紧随PP-OCRv3重磅发布

    PaddleOCRSharp是一个基于PaddleOCR的C++代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能,同时针对小图识…

    Python 2023年10月26日
    045
  • 图数据挖掘:基于概率的流行病模型

    1 导引 在上一篇博客《图数据挖掘:网络中的级联行为》中介绍了用基于决策的模型来对级联行为进行建模,该模型是基于效用(Utility)的且是是确定性的,主要关注于单个节点如何根据其…

    Python 2023年10月29日
    037
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球