数据结构--稀疏数组
思路:将一个二维数组放进另一个数组中,前提:原始数组必须是有某个元素占据大部分位置例如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();
}
}
}
知识兔