(java)二维数组转稀疏数组再转二维数组并打印的解析和代码

文章介绍了如何利用稀疏数组来存储棋盘游戏中非空的棋子位置和值,以节省内存。首先遍历棋盘获取非空棋子数量,然后构建稀疏数组记录棋子的行、列和值。之后,可以从稀疏数组还原二维棋盘。这种方法减少了对整个二维数组的存储需求。
摘要由CSDN通过智能技术生成

 稀疏数组通常用于做棋盘游戏,用来保存每个棋子的位置和值,以达到保存棋局又不用保存整个二维数组以此来节省内存

稀疏数组[非空值个数加一(列)][3(行)] 第一列的三行分别是棋盘的行列最大长度和一共有多少个非空值(棋子),

首先要遍历棋盘拿到棋子个数才能建立稀疏数组,建立后再遍历一次,从稀疏数组第二列开始

刻录每个棋子的行,列,值,至于行是放[几号棋子][0]还是[][1]自己选

稀疏转二维就读取第一列的最大行列值来初始化数组,然后挨个读取稀疏数组来还原棋盘,

(循环稀疏数组的列)

 

package structure;

public class sparsestructure {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int chess[][] = new int[11][11];
		chess[1][2]=1;
		chess[2][3]=2;
		for(int k1[]:chess) {
			for(int k2:k1) {
				System.out.printf("%d\t",k2);
			}
		System.out.println();
		}
		int sum = 0;
		for(int i = 0;i<11;i++) {
			for(int i2 = 0;i2<11;i2++) {
				if(chess[i][i2]!=0) {
					sum++;
				}
				
			}
		}
		System.out.println(sum);
		int sparse [][] = new int[sum+1][3];
		sparse [0][0]=11;
		sparse [0][1]=11;
		sparse [0][2]=sum;
		int z1 = 0;
		for (int b1 = 0;b1<11;b1++) {
			for (int b2 = 0;b2<11;b2++) {
				if(chess[b1][b2]!=0) {
					z1++;
					sparse[z1][0]=b1;
					sparse[z1][1]=b2;
					sparse[z1][2]=chess[b1][b2];
				}
			}
		}
		for(int i =0;i<sparse.length;i++) {
			System.out.printf("%d\t%d\t%d\t",sparse[i][0],sparse[i][1],sparse[i][2]);
			System.out.println();
		}
		int chess2[][]=new int[sparse[0][0]][sparse[0][1]];
		for(int i1 = 1;i1<sparse.length;i1++) {
			
			chess2[sparse[i1][0]][sparse[i1][1]]= sparse[i1][2];
			
		}
		for(int k1[]:chess2) {
			for(int k2:k1) {
				System.out.printf("%d\t",k2);
			}
		System.out.println();
		}
			
		

	}

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值