Wednesday, 15 April 2015

Print Spiral number from a matrix
for e.g.
Enter the number of elements : 5
First number of Matrix : 1

2     3     4 5
6 7 8 9 10
11   12 13   14 15
16   17   18   19   20
21   22   23   24 25

[1, 2, 3, 4, 5, 10, 15, 20, 25, 24, 23, 22, 21, 16, 11, 6, 7, 8, 9, 14, 19, 18, 17, 12, 13]


Program:-
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class SpiralToArray{

public static ArrayList<Integer> spiralOrder(int[][] matrix) {
     ArrayList<Integer> result = new ArrayList<Integer>();

     if(matrix == null || matrix.length == 0) return result;

     int m = matrix.length;
     int n = matrix[0].length;
     int x=0;
     int y=0;

     while(m>0 && n>0){

         //if one row/column left, no circle can be formed
         if(m==1){
             for(int i=0; i<n; i++){
                 result.add(matrix[x][y++]);
             }
             break;
         }else if(n==1){
             for(int i=0; i<m; i++){
                 result.add(matrix[x++][y]);
             }
             break;
         }

         //below, process a circle

         //top - move right
         for(int i=0;i<n-1;i++){
             result.add(matrix[x][y++]);
         }

         //right - move down
         for(int i=0;i<m-1;i++){
             result.add(matrix[x++][y]);
         }

         //bottom - move left
         for(int i=0;i<n-1;i++){
             result.add(matrix[x][y--]);
         }

         //left - move up
         for(int i=0;i<m-1;i++){
             result.add(matrix[x--][y]);
         }

         x++;
         y++;
         m=m-2;
         n=n-2;
     }

     return result;
 }
public static void main(String args[])throws IOException
   {
       BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
       System.out.print("Enter the number of elements : ");
       int n=Integer.parseInt(br.readLine());
       System.out.print("First number of Matrix : ");
       int start=Integer.parseInt(br.readLine());
       int A[][]=new int[n][n];
       for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
      A[i][j]=start++;
      }
       }
       for(int i=0;i<n;i++){
      for(int j=0;j<n;j++){
      System.out.print(A[i][j]);
      System.out.print("\t");
      }
      System.out.println();
       }
       System.out.println(SpiralToArray.spiralOrder(A));
     
   }

}

No comments:

Post a Comment