将二维数组转为稀疏数组

public class SparseArray {
	/**
	 * 用二维数组实现一个棋盘,1代表黑子,2代表蓝子
	 */
	public static void main(String[] args) {
		/**
		 * 二维数组
		 */
		int[][] chessArray1 = new int[11][11];
		chessArray1[1][2] = 1;
		chessArray1[2][3] = 2;
		for (int[] row : chessArray1) {
			for (int data : row) {
				System.out.printf("%d\t", data);
			}
			System.out.println();
		}
		System.out.println("_________________________________________________________________________________");
		/**
		 * 将此二维数组转为稀疏数组
		 */
		// 先遍历二维数组,得到有几个非零数据
		int sum = 0;
		for (int[] row : chessArray1) {
			for (int data : row) {
				if (data != 0) {
					sum++;
				}
			}
		}
		// 构造稀疏数组
		int[][] sparseArray = new int[sum + 1][3];
		sparseArray[0][0] = chessArray1.length;
		sparseArray[0][1] = chessArray1[0].length;
		sparseArray[0][2] = sum;
		// 遍历二维数组,并将非零元素填充到稀疏数组中
		int count = 0;
		for (int i = 0; i < chessArray1.length; i++) {
			for (int j = 0; j < chessArray1[0].length; j++) {
				if (chessArray1[i][j] != 0) {
					count++;
					sparseArray[count][0] = i;
					sparseArray[count][1] = j;
					sparseArray[count][2] = chessArray1[i][j];
				}
			}
		}
		// 打印稀疏数组
		for (int[] row : sparseArray) {
			for (int data : row) {
				System.out.printf("%d\t", data);
			}
			System.out.println();
		}
	}

}

  

原文地址:https://www.cnblogs.com/dashenaichicha/p/12675087.html

时间: 2024-07-31 08:38:51

将二维数组转为稀疏数组的相关文章

二维数组转稀疏数组、稀疏数组恢复二维数组(Java实现)

public static void main(String[] args) { // 创建一个原始的二维数组 9*9 int chessArr1[][] = new int[9][9]; // 0表示没有棋子,1表示黑子,2表示白子 chessArr1[1][2] = 1; chessArr1[2][3] = 2; chessArr1[5][2] = 2; chessArr1[7][6] = 2; chessArr1[8][4] = 1; System.out.println("原始的二维数组

将二维数组转为一维数组的2种方法

如何将下面的二维数组转为一维数组. 代码如下: $msg = array( array( 'id'=>'45', 'name'=>'jack' ), array( 'id'=>'34', 'name'=>'mary' ), array( 'id'=>'78', 'name'=>'lili' ), ); 第一种方法: 代码如下: foreach($msg as $k => $v){ $ids[] = $id; $names[] = $name; } 第二种方法: 代

稀疏数组的经典应用(二维数组与稀疏数组的相互转换)

package com.zhangwl.数据结构.稀疏数组; /** * @ClassName SparseArray * @Description 棋盘游戏演示 * @Author zhangwl * @Date 2019/10/10 22:54 * @Version 1.0 **/public class SparseArray { public static void main(String[] args) { /*创建一个原始的二维数组11 * 11 ,0:表示没有棋子 :1:表示黑子:

利用递归把多维数组转为一维数组的函数

函数名称:array_multi2single 函数原形:array array_multi2single(array) 实现功能:把一个多维数组的数值存放到一维数组中,不保存Key. < ?php function array_multi2single($array) {     static $result_array=array();     foreach($array as $value)     {         if(is_array($value))         {    

二维数组与稀疏数组的相互转化

package struct; public class SparseArr { public static void main(String[] args) { int chess[][] = new int[11][11]; //0代表空白,1代表黑子,2代表蓝子 chess[1][2] = 1; chess[2][3] = 2; int sum = 0; //获取有效值个数 for (int[] rows : chess) { for (int data : rows) { System.

数据结构之二维数组与稀疏数组的转换

1.二维数组 二维数据其实就是高数中的矩阵,在此不做过多的解释 2.稀疏数组 当一个二维数组中大多值为0,或者相同时,我们可以考虑用到稀疏数组,来减少内存 稀疏数组的处理方法: 1)一个有3列的二维数组,记录原数组有几行几列,多少个不同的值 2)不同值的元素的所在行以及列记录在稀疏数组中,从而缩小规模 3.例子如下: 4.下面是稀疏数组以及二维数组之间的转换 package com.ebiz.array; /** * @author YHj * @create 2019-07-13 16:46

php函数array_column如何将二维数组转为一维数组

/*** * 参数1二维数组,参数2 返回一维数组的值的键值 参数3 用参数3作为返回一维数组的键值 */ $last_names = array_column($records, 'last_name', 'first_name'); print_r($last_names);

hdu1081 DP类最长子段和(二维压缩+前缀和数组/树状数组计数)

题意:给出一个 n * n 的数字矩阵,问最大子矩阵和是多少. 由于和最长子段和问题类似,一开始想到的就是 DP ,一开始我准备用两个循环进行 DP ,对于每一个 (i,j) ,考察(i - 1,j)与(i,j - 1), dp 值代表以该点为右下角的最大矩阵和,同时记录下这个矩阵的左上角坐标,状态转移时通过将原和最大矩阵通过补边推到当前和最大矩阵.但是其实这种做法有一个明显的问题,就是转移时,补上边后 dp 值相同怎么办,dp 值相同而矩阵不同的话会影响到下一次状态转移后补上的矩阵的情况,从而

二维最大和子数组

1.设计思路 因为计算了一位的最大和子数组,所以想办法将二维的数组转换成一维子数组进行求解: 首先,将二维数组的第一行(列)赋值到新的一维数组中,在一维的数组中求得子数组的最大值, 然后,将二维数组的第二行(列)加到一维数组中,再次求得子数组的最大值,并和第一步求得的最大值进行比较,若新的值比较大,留下最大值,如果新值比较小,退出这一个循环,从第二行(列)开始第一步,这样就可以求出最大和子数组: 2.源代码 #include<iostream> #include<ctime> us