五子棋游戏
使用二维数组模拟一个五子棋游戏
功能概述
功能:
1.存盘
2.读档
五子棋盘使用二维数组来存放
1.存盘:为了节省空间将二维数组转化为稀疏数组将稀疏数组存放在磁盘中
2.读档:将稀疏数组先转化为二维数组在表示出来
具体思路
1.使用二维数组模拟一个棋盘
2.棋盘存储压缩使用的是将二维数组转化为一个稀疏数组存储减少存储空间
稀疏数组
节省数组所占用的空间降低内存开销
数组下标0开始
处理方式:
1.第一行记录一共几行几列和多少个不同的值
2.把具有不同值得元素行列记录在一个小规模数组中从而缩小程序规模
转换思路
将二维数组转为稀疏数组思路:
1.遍历原始的二维数组得到有效数据的个数sum
2.根据sum就可以创建稀疏数组sparseArr int = [sum + 1][3]
3.将二维数组的有效数据存储稀疏数组中
将稀疏数组转为二维数组思路:
1.先读取稀疏数组的第一行根据第一行的数据创建原始的二维数组chessArr int = [11][11]
2.在读取稀疏数组的后几行数据,恢复到原始二维数组
普通二维数组 稀疏数组 意义
0 0 0 0 0 3 5 2 共3行5列 非0值2个
1 0 0 0 0 ——> 1 0 1 第2行第1列 值为1
0 0 9 0 0 2 2 9
代码实现
package com.yc.day01.Arr;
/*
@ClassName Arr
@author cc
@Date 2020-07-27 10:14
@Version 1.0
*/
public class Arr {
public static void main(String[] args) {
//二维数组定义棋盘
int chessboard[][] =new int[11][11];
//1表示黑子2表示蓝子
chessboard[1][2] = 1;
chessboard[2][3] = 2;
//输出原始二维数组
System.out.println("原始二维数组:");
for (int[] row : chessboard) {
for (int data : row){
System.out.printf("%d\t",data);
}
System.out.println();
}
//将原始二维数组转为稀疏数组
//1.遍历二维数组得到数据个数
int sum = 0;
for (int i = 0;i<11 ;i++)
{
for(int j = 0 ; j<11 ;j++){
if(chessboard[i][j] !=0){
sum ++;
}
}
}
//2.创建稀疏数组
int sparseArr[][] = new int [sum + 1 ][3];
//给稀疏数组赋值
sparseArr[0][0]=11;
sparseArr[0][1]=11;
sparseArr[0][2]=sum;
//遍历二维数组将非零的值放到稀疏数组中
int count = 0;
for (int i = 0;i<11 ;i++) {
for(int j = 0 ; j<11 ;j++){
if(chessboard[i][j] !=0){
count++;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessboard[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();
}
}