算法(一)稀疏矩阵
稀疏数组:
处理办法: 1)记录数组一共几行几列,有多少个不同的值
2)把具有不同值的元素的行列以及值记录在一个小规模的数组中,从而缩小程序的规模
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个原始数组11*11
//0表示没有棋子,1表示有棋子
int[][]arr = new int[11][11];
arr[1][2] = 1;
arr[2][3] = 2;
arr[3][4] = 3;
arr[4][8] = 4;
arr[5][5] = 5;
arr[7][6] = 6;
arr[10][10] = 6;
//输出数组
System.out.println("原始二维数组");
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr.length;j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
//二维数组转稀疏数组
int sum = 0;
for(int i=0;i<11;i++) {
for(int j=0;j<11;j++) {
if(arr[i][j]!=0) {
sum++;
}
}
}
//赋值第一行
int[][] xishu = new int[sum+1][3];
xishu[0][0] = 11;
xishu[0][1] = 11;
xishu[0][2] = sum;
//赋值剩下的
int count = 0;
for(int i=0;i<11;i++) {
for(int j=0;j<11;j++) {
if(arr[i][j]!=0) {
count++;
xishu[count][0]=i;
xishu[count][1]=j;
xishu[count][2]=arr[i][j];
}
}
}
//输出稀疏矩阵
for(int i=0;i<sum+1;i++) {
for(int j=0;j<3;j++) {
System.out.print(xishu[i][j]+" ");
}
System.out.println();
}
//---------------
//稀疏矩阵转换回来
int [][]back = new int[11][11];
for(int i=1; i<sum+1;i++) {
back[xishu[i][0]][xishu[i][1]]=xishu[i][2];
}
//输出稀疏矩阵
for(int i=0;i<11;i++) {
for(int j=0;j<11;j++) {
System.out.print(back[i][j]+" ");
}
System.out.println();
}
}