二维数组与稀疏数组转换

目录

系列文章目录

文章目录

一、五子棋问题与稀疏数组的联系

二、为什么要把数组转换为稀疏数组

三:将二维数组转换为稀疏数组的思路:

 四:代码中所用知识

五:代码实现

总结



一、五子棋问题与稀疏数组的联系

  • 可以使用稀疏数组来保存类似棋盘、地图等的二维数组。
  •  把棋盘问题对应为二维数组问题。

二、为什么要把数组转换为稀疏数组

  •   二维数组的默认值为0,当数组中记录的很多数值没有实际意义时,可以将该数组转换为稀疏数组。        

  • 例:将棋盘中的黑白棋子各看为1和2,其余没有棋子的地方则为0,此时二维数组中将有大量0,并无实际意义。可以将该二维数组转换为稀疏数组。                            

                                               

                                ​​​​​​​        

三:将二维数组转换为稀疏数组的思路:

  1. 将二维数组中具有实际意义的数字个数记为sum,则稀疏数组行数(row) = sum+1;列数(col)为3。
  2. 稀疏数组的形式:row    col     value
  3. 稀疏数组第一行为二维数组的总行数、总列数、有实际意义的数值个数。
  4. 剩余行为对应的有意义的数值所在行和所在列以及它的值。

             

 四:代码中所用知识

  1. 增强 for 循环
  •    二位数组实质上也是一维数组,只不过每个数组元素都是另一个一维数组的地址。

          例:int arr[ ][ ] = new int [3][4];  创建了一个二维数组,有三个元素,每一个元素又                 是一个一维数组,里面包含四个元素。

  • 遍历二维数组,使用嵌套循环。

        外层循环获取数组的所有一维数组,内层循环遍历一维数组中的每个元素。

int arr[][] = new int[3][4];

arr[2][3] = 3;

for(int[] i:arr){//外层循环得到每个一维数组,即得到的是数组

    for(int s:i){//内层循环遍历一维数组中的数
        
        System.out.print(s+"\t");
    //  System.out.printf("%d\t",s);
    }
    
    System.out.println();

}
 

五:代码实现

package day_01;

public class Main {
	
		public static void main(String[] args) {
			int sum = 0;
			int arr[][] = new int[11][11];
			
			arr[1][2] = 1;
			arr[2][3] = 2;
			
			//输出初始二维数组
			System.out.println("初始的二位数组为: ");
			for(int[] i:arr) {
				for(int s:i) {
					System.out.printf("%d\t", s);
				//	System.out.print(s+"\t");
					
					if(s != 0) {
						sum++;
					}
				}
				System.out.println();
			}
			
			//创建稀疏数组,将二维数组转换为稀疏数组
			int sparseArr[][] = new int[sum+1][3];
			int count = 0;
			sparseArr[0][0] = 11;
			sparseArr[0][1] = 11;
			sparseArr[0][2] = sum;
			for(int i = 0;i<11;i++) {
				for(int j = 0;j<11;j++) {
					
					if(arr[i][j]!=0) {
						count++;
						sparseArr[count][0] = i;
						sparseArr[count][1] = j;
						sparseArr[count][2] = arr[i][j];
						
					}
					
				}
			}
			
			System.out.println("稀疏数组");
			for(int[] i:sparseArr) {
				for(int s:i) {
					System.out.print(s+"\t");
				}
				System.out.println();
			}
			
			//将稀疏数组转为二维数组
			System.out.println("重新转化为的二维数组为:");
			int chessArr[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
			chessArr[1][2] = 1;
			chessArr[2][3] = 2;
			for(int[] i:chessArr) {
				for(int s:i) {
					System.out.print(s+"\t");
				}
				System.out.println();
			}
			
		
			
			
		
		}

}

总结

以上就是今天要讲的内容,本文仅仅简单介绍了对应于棋盘、地图等的二维数组与稀疏数组间的转换。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值