您的位置:首页 > 理论基础 > 数据结构算法

数据结构(一)---稀疏矩阵

2020-03-25 08:06 302 查看

数据结构(一)---稀疏矩阵

public class SparseArray {
public static void main(String[] args) {
//创建一个二维数组11*11
//0代表没有棋子,1表示黑子,2表示蓝子
int chessArray01[][]=new int[11][11];
chessArray01[1][2]=1;
chessArray01[2][3]=2;
chessArray01[3][3]=2;
//输出原始的二维数组
for (int[] row : chessArray01) {
for (int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}

/**把二维数组转成稀疏数组
* @Date: 2019/10/29 0:08
*/
//1-先遍历二维数组,得到非0数据的个数
int sum=0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArray01[i][j]!=0){
sum++;//统计二维数组中值不为0的个数
}
}
}
System.out.println("数组中不为0的值个数sum="+sum);

//2-创建对应的稀疏数组
//了解稀疏矩阵之后,就知道固定为3列,行数为sum+1,因为第一行是参数栏,初始化稀疏矩阵如下
int sparseArray[][]=new int[sum+1][3];
sparseArray[0][0]=11;
sparseArray[0][1]=11;
sparseArray[0][2]=sum;

//遍历二维数组里不为0的值,再把这个值放进稀疏数组
int count=0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArray01[i][j]!=0){
//第一个非0值,放在第二行,索引为1
//第二个非0值,放在第三行,索引为2
//第三个非0值,放在第四行,索引为3
//第count个非0值,放在第count+1行,索引为count
//所以需要一个计数器,记录到第几个非0值了
count++;
sparseArray[count][0]=i;
sparseArray[count][1]=j;
sparseArray[count][2]=chessArray01[i][j];
}
}
}

//3-输出稀疏矩阵
System.out.println("得到稀疏矩阵,如下:");
for (int[] row : sparseArray) {
for (int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}

//总结
//首先,你要了解稀疏矩阵的结构,才能只能怎么把遍历出来的数据放进稀疏矩阵

/**把稀疏数组转换成原始的二维数组
* 1-先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组(第一行包含了二位数组的基本信息)
* 2-在读取稀疏矩阵数组后几行的数据,并赋给二维数组
*
* @Date: 2019/10/28 23:42
*/

//1-先知道二维数组一共有几行几列
int rowSum=sparseArray[0][0];//二维数组的行数
int lieSum=sparseArray[0][1];//二维数组的列数
int numSum=sparseArray[0][2];//二维数组一共有几个值不为0
//创建二维数组(已知行数和列数)
int chessArray02[][]=new int[rowSum][lieSum];

//2-遍历稀疏数组里的值,然后放到二维数组里
int rowNum=0;
int lieNum=0;
for (int i = 1; i < numSum+1; i++) {
rowNum=sparseArray[i][0];//稀疏数组值在二维数组里的行数
lieNum=sparseArray[i][1];//稀疏数组值在二维数组里的列数
chessArray02[rowNum][lieNum]=sparseArray[i][2];//稀疏数组值放到二维数组里去
}

//3-遍历输出二维数组
System.out.println("根据稀疏矩阵得到的二维数组,如下:");
for (int[] row : chessArray02) {
for (int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}

}
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
孫治AllenSun 发布了56 篇原创文章 · 获赞 5 · 访问量 1250 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: