public class CompressMatrix
{
	
	static int row_capacity = 1000;
	static int column_capacity = 1000;
	// Default constructor. Sets aside enough capacity for one vertex
	
     
	
    public sparseMatrix[] compress(double Input[][])
    {
    		
    		sparseMatrix[] returnList = new sparseMatrix[row_capacity*column_capacity];
    		
    	
    		
    		// Search and store
    		int c=0;
    		
    		for(int i = 0; i < Input.length; i++)	
    			for(int j = 0; j < Input[i].length; j++)
    				if(Input[i][j] != 0)
    					returnList[c++] = new sparseMatrix(i,j,Input[i][j]);
    					
    					
    				
    		
    		// Compress (reduction of array size)
    		
    		sparseMatrix[] temp = new sparseMatrix[c];
    		System.arraycopy(returnList,0,temp,0,c);
    		returnList = temp;
    		
    			  	
    		return returnList;
    	}
    	
    public static void main(String[] args)
    {
    		
    		sparseMatrix[] compressed = new sparseMatrix[row_capacity*column_capacity];
    		double[][] SampleGraph = new double[100][500];
    		
    		for(int i=0;i<100;i++)
    			for(int j=0;j<500;j++)
    				SampleGraph[i][j]=0;
    		
    		SampleGraph[0][5] = 100.5;
    		SampleGraph[1][10] = 20.5;
    		SampleGraph[25][50] = 67;
    		
    		CompressMatrix nostatic = new CompressMatrix();
    		compressed = nostatic.compress(SampleGraph);
    		
    		//   Print
    		System.out.println("The compressed form:");
    		for (int k = 0; k < compressed.length; k++)
    			System.out.println("("+compressed[k].row+", "+compressed[k].column+") -> "+compressed[k].value);
    		
    }

} // end of class
