2013-10-30 1 views
2

나선형으로 mxn 크기 행렬을 인쇄하려고합니다. Java를 통해이 코드를 작업하려고 시도했지만 rows = columns 인 경우 나선형을 올바르게 인쇄 할 수있었습니다. 동일하지 않은 행과 열에 대해서는 인쇄를 반복하는 경향이 있습니다. 따라서 중앙으로 정확히 인쇄되지만 하나 이상의 요소가 반복됩니다. 디버깅을 시도했지만 멀리 도달 할 수 없었습니다. 아무도 도와 줄 수 있습니까? 여기에 제가 지금까지 가지고있는 코드가 있습니다.나선형으로 mxn 행렬을 인쇄하십시오. - Java

1 
2 
3 
4 
5 
10 
15 
14 
13 
12 
11 
6 
7 
8 
9 
8 
7 

그래서 중간 값 (9)에 도달 한 후 다시 8, 7 PS에 대한 추적 : 다음과 같이

public class SpiralMatrix { 
public static void main (String args[]){ 
    int[][] mat = { {1, 2, 3, 4, 5}, 
        {6, 7, 8, 9, 10}, 
        {11,12, 13, 14, 15}}; 
    int i,n=3,m=5,r=m-1,q=n-1; 
    while(q>0 && r>0){ 
     for(i=m-1-r;i<=r;i++){ 
      System.out.println(mat[m-1-r][i]); 
     } 
     for(i=n-1-q+1;i<=q;i++){ 
      System.out.println(mat[i][r]); 
     } 
     for(i=r-1;i>=m-1-r;i--){ 
      System.out.println(mat[q][i]); 
     } 
     for(i=q-1;i>=n-1-q+1;i--){ 
      System.out.println(mat[i][n-1-q]); 
     } 
     q--; 
     r--; 
    } 
} 
} 

이의 출력은이 숙제를하지, 난 브러시 업하고 면접을위한 나의 기술. 그리고 제발 쉽게 가십시오, 나는 평생 학습자입니다! 감사합니다. 나는 너의 도움에 감사 할 것이다.

답변

1

this question에서 이에 대한 토론이 있습니다. 많은 대답을 볼 수 있습니다.

그리고 내 대답은 this one입니다.

너는 너무 많이 인쇄하고있는 것 같고, 그것은 루프의 세 번째 내부에서 온 것 같다. (또한 너비가 너비보다 큰 다른 경우에도 네 번째 for 루프에서 가능하다.)

높이 (q)가 하나이지만 오른쪽에서 왼쪽 (세 번째 inner for 루프)으로 인쇄하기 때문입니다. 높이가 1이면 그 줄은 첫 번째 inner for 루프에 의해 인쇄되었으므로 실수입니다. 따라서 높이가 1보다 큰 경우에만 인쇄 할 조건이 필요합니다. 네 번째 inner for 루프의 경우도 마찬가지입니다.

public class SpiralMatrix { 
    public static void main (String args[]){ 
     int[][] mat = { {1, 2, 3, 4, 5}, 
         {6, 7, 8, 9, 10}, 
         {11,12, 13, 14, 15}}; 
     int i,n=3,m=5,r=m-1,q=n-1; 
     while(q>0 && r>0){ 
      for(i=m-1-r;i<=r;i++){ 
       System.out.println(mat[m-1-r][i]); 
      } 
      for(i=n-1-q+1;i<=q;i++){ 
       System.out.println(mat[i][r]); 
      } 
      for(i=r-1;i>=m-1-r && q>1;i--){ 
       System.out.println(mat[q][i]); 
      } 
      for(i=q-1;i>=n-1-q+1 && r>1;i--){ 
       System.out.println(mat[i][n-1-q]); 
      } 
      q--; 
      r--; 
     } 
    } 
} 
+0

Ah! 빛나는 .. 나는 당신의 요점을 얻는다! 고마워요. – Sid

0
public class SpiralMatrix { 
    public static void main(String[] args) { 
     int a[][] = {{1, 2, 3, 4,21,26}, 
       {5, 6, 7, 8,22,27}, 
       {9, 10, 11, 12,23,28}, 
       {13,14,15,16,24,29}, 
       {17,18,19,20,25,30}, 
       {31,32,33,34,35,36}}; 
     System.out.println(a[0].length); 
     for(int i=0; i<6; i++) { 
      for(int j=0;j<6;j++){ 
       System.out.print(a[i][j] + " , "); 
      } 
      System.out.println(); 
     } 
     int m=6,n=6; 

     for (int i=0;i<m;i++) { 
      int j=i; 
      for(;j<n;j++){ 
       System.out.print(a[i][j] + " , "); 
      } 

      for(j=i+1;j<m;j++) { 
       System.out.print(a[j][n-1] +" , "); 
      } 
      for(j=n-2;j>=i;j--){ 
       System.out.print(a[m-1][j] + " , "); 
      } 
      for(j=m-2;j>i;j--){ 
       System.out.print(a[j][i] + " , "); 
      } 
      m=m-1; 
      n=n-1;   
     } 
    } 

} 
//tried to simplfy the code to print a square matrix spiral way. 
//complete code given, please post if feel any modification required. 
+3

당신이하고있는 일을 설명하고, 어떤 코드만으로는 대답을 형성해서는 안됩니다. –

+0

은 방금 원래 게시물을 편집했습니다. – iinpw

0

당신은 만약 조건 로봇이 90도 회전 할 때마다 필요합니다!

public static Stack<int> SpiralTraverse(int[,] arr) 
    { 
     Stack<int> trav = new Stack<int>(); 
     int m = arr.GetLength(0)-1; //end point (m,n) 
     int n = arr.GetLength(1)-1; 
     int k = 0; int l = 0; // starting point (k,l) 
     int i; //index 
     while(k <= m && l <= n) 
     { 
      for (i= l; i <= n; i++) 
      { 
       trav.Push((int)arr[k, i]); 
      } 
      k++; 
      for (i = k; i <= m; i++) 
      { 
       trav.Push((int)arr[i, n]); 
      } 
      n--; 
      if (k < m) 
      { 
       for (i= n;i>= l; i--) 
       { 
        trav.Push((int)arr[m,i]); 
       } 
       m--; 
      } 
      if (l < n) 
      { 
       for (i= m;i>= k; i--) 
       { 
        trav.Push((int)arr[i, l]); 
       } 
       l++; 
      } 
     } 
     return trav; 
    } 
관련 문제