数据结构--稀疏数组
思路:将一个二维数组放进另一个数组中,前提:原始数组必须是有某个元素占据大部分位置例如0;
重新定义一个二维数组,int arr[][] = new int [sum+1][3]
再将原始数组的 行 列 值 放进arr中的arr[0][0]-行 arr[0][1]-列 arr[0][2]-值
例如一个11*11的二维数组有5个其他元素转化为稀疏数组
然后就是讲稀疏数组给反转回二维数组
public class Erwei_Xishu { public static void main(String[] args) { // TODO Auto-generated method stub int num = 0; //创建原始数组arr int arr[][] = new int[11][11]; arr[5][5] = 1; arr[6][7] = 2; arr[1][4] = 1; arr[2][9] = 2; arr[6][10] = 1; for(int i[]:arr) { for(int j:i) { // System.out.print(j+"\t"); if(j!=0) { num++; } } // System.out.println(); } System.out.println(num); //创建个新的二维数组--稀疏数组 int xisu[][] = new int[num+1][3]; xisu[0][0] = 11; xisu[0][1] = 11; xisu[0][2] = num; int sum = 1;//建立一个计数器 for(int i=0;i<arr.length;i++) { for(int j=0;j<arr[i].length;j++) { if(arr[i][j]!=0) { xisu[sum][0] = i; xisu[sum][1] = j; xisu[sum][2] = arr[i][j]; sum++; } } } //输出稀疏数组 for(int y[]:xisu) { for(int c:y) { System.out.print(c+"\t"); } System.out.println(); } //创建原始数组,并将稀疏数组的组反传给原始数组 int arr1[][] = new int [xisu[0][0]][xisu[0][1]]; for(int i=1;i<xisu.length;i++) { arr1[xisu[i][0]][xisu[i][1]] = xisu[i][2]; } for(int a[]:arr1) { for(int v:a) { System.out.print(v+"\t"); } System.out.println(); } } }
原文:https://www.cnblogs.com/dajuweizhong/p/11564223.html