稀疏矩阵数组使用

1.首先我们看图看一下稀疏数组的构造,思考我们如何把值存到数组中

这个数组存储的位置如上,我们要理解第一行是存放矩阵的行数,列数,矩阵中不为零的个数

第二行开始,我们开始存储每一个数的行数和列数和值,

之后我们将压缩后的数组,重新变成矩阵。

import java.util.Arrays;
public class Demo3 {
    public static void main(String[] args) {
        int[][] chess=new int[11][11];
        //0代表为下的地方,1代表黑子,2代表红子
        //System.out.println("请开始下棋,输入数字");
        //Scanner scanner=  new Scanner(System.in);
        chess[0][1]=1;
        chess[1][2]=2;
        //遍历二维数组,增强for循环
        for (int[] a:chess) {
            for(int c:a){
                System.out.print(c+"  ");
            }
            System.out.println();
        }
        //遍历数组2,对数组中的值进行操作
        int num=0;
        for (int[] value : chess) {
            for (int i : value) {
                if (i != 0) {
                    num++;
                }
            }
        }
        System.out.println("有效值的个数"+num);
        //创建一个二维稀疏矩阵
        int[][] chess1 = new int[num+1][3];
        chess1[0][0]=11;
        chess1[0][1]=11;
        chess1[0][2]=num;
        //遍历二维数组,将非零的值,存放稀疏数组中
        int count=0;
        for(int i=0;i< chess.length;i++){
            for (int j = 0; j <chess[i].length ; j++){
                if(chess[i][j]!=0){
                    count++;
                    chess1[count][0] = i;
                    chess1[count][1] = j;
                    chess1[count][2] = chess[i][j];

                }
            }
        }
        System.out.println("################################");
        System.out.println("输出稀疏矩阵");
        for (int i = 0; i < chess1.length; i++) {
            System.out.println(chess1[i][0]+"\t"+ chess1[i][1]+"\t"+chess1[i][2]+"\t");
        }
        //1.读取稀疏数组
        int[][] chess2 = new int [chess1[0][0]][chess1[0][1]];

        //给其中的元素还原它的值
        //这里i=1因为稀疏矩阵中,第一行是整个的信息,具体的信息从第二行开始
        for(int i = 1; i < chess1.length;i++){
            chess2[chess1[i][0]][chess1[i][1]]=chess1[i][2];
        }
        //打印数组
        for (int i = 0; i < chess2.length; i++) {
            for (int j = 0; j < chess2[i].length ; j++) {
                System.out.print(chess2[i][j]+"  ");
            }
            System.out.println();
        }
        }

    }

以上是关于棋盘的案例,如有不对,欢迎指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值