矩阵旋转90度

一维数组转置(首尾交换)

[plain] view plain copy
  1. public class array {  
  2.     public static void main(String args[]){  
  3.         int data [] =new int [] {1,2,3,4,5,6};  
  4.         exchange(data);  
  5.         print1(data);  
  6.     }  
  7.     //首尾交换  
  8.     public static void exchange(int temp[]){  
  9.         int head=0;  
  10.         int tail=temp.length-1;  
  11.         for(int i=0;i<temp.length/2;i++){  
  12.             int k=temp[head];  
  13.             temp[head]=temp[tail];  
  14.             temp[tail]=k;  
  15.             head++;  
  16.             tail--;  
  17.         }  
  18.     }  
  19.     //输出  
  20.     public static void print1(int temp[]){  
  21.         for(int s=0;s<temp.length;s++){  
  22.             System.out.println(temp[s]);  
  23.         }  
  24.     }  
  25.   
  26. }  

二维数组转置


[plain] view plain copy
  1. public class helloword {  
  2.     public static void main(String args[]){  
  3.         int data [][] = new int [][] {{1,2,3},{4,5,6},{7,8,9}};  
  4.         reverse(data);  
  5.         print1(data);  
  6.     }  
  7.     //将矩阵转置  
  8.     public static void reverse(int temp [][] ){  
  9.         for(int i=0;i<temp.length;i++){  
  10.             for(int j=i;j<temp[i].length;j++){  
  11.                 int k=temp[i][j];  
  12.                 temp[i][j]=temp[j][i];  
  13.                 temp[j][i]=k;  
  14.               }  
  15.         }  
  16.     }  
  17.     //将矩阵输出  
  18.     public static void print1(int temp[][]){  
  19.         for(int i=0;i<temp.length;i++){  
  20.             for(int j=0;j<temp[i].length;j++){  
  21.                 System.out.print(temp[i][j]+"\t");  
  22.             }  
  23.             System.out.println();  
  24.         }  
  25.     }  
  26.       
  27. }  

 

方阵顺时针旋转90

矩阵旋转90度

方法一:可以看出,将二维数组顺时针旋转90度,就是将其转置后的数组的列进行前后交换(即第一列变为最后一列,第二列变为倒数第二列)

方法二:通过观察,可以看出:

  1.  列号变为行号
  2. n-行号)变为列号(其中n为方阵维数减1



 

若要将矩阵顺时针旋转180,两次调用旋转90度的函数就可以。

方法一、方法二不仅针对三维方阵,其他维数的方阵也适合。

 

 

 

方法一:


[plain] view plain copy
  1. public class helloword {  
  2.     public static void main(String args[]){  
  3.         int data [][] = new int [][] {{1,2,3},{4,5,6},{7,8,9}};  
  4.         reverse(data);  
  5.         exchange(data);  
  6.         print1(data);  
  7.     }  
  8.     //将矩阵转置  
  9.     public static void reverse(int temp [][] ){     
  10.         for(int i=0;i<temp.length;i++){  
  11.             for(int j=i;j<temp[i].length;j++){  
  12.                 int k=temp[i][j];  
  13.                 temp[i][j]=temp[j][i];  
  14.                 temp[j][i]=k;  
  15.             }  
  16.         }  
  17.     }  
  18.     //将转置后的矩阵的列交换(第一列跟最后一列交换,第二列跟倒数第二列交换)  
  19.     public static void exchange(int temp[][]){  
  20.         int a=0;  
  21.         int b=temp.length-1;  
  22.         for(int i=0;i < (temp.length)/2;i++){  
  23.             for(int j=0;j<temp.length;j++){  
  24.                 int k=temp[j][a];  
  25.                 temp[j][a]=temp[j][b];  
  26.                 temp[j][b]=k;  
  27.             }  
  28.             a++;  
  29.             b--;  
  30.         }  
  31.     }  
  32.     //将矩阵输出  
  33.     public static void print1(int temp[][]){  
  34.         for(int i=0;i<temp.length;i++){  
  35.             for(int j=0;j<temp[i].length;j++){  
  36.                 System.out.print(temp[i][j]+"\t");  
  37.             }  
  38.             System.out.println();  
  39.         }  
  40.     }  
  41.       
  42. }  

方法二:


[plain] view plain copy
  1. public class arrayEx {  
  2.     public static void main(String args[]){  
  3.         int data [][] =new int [][] {{1,2,3},{4,5,6},{7,8,9}};  
  4.         rotate(data);  
  5.         print1(data);  
  6.     }  
  7.     //旋转90度  
  8.     public static void rotate(int temp[][]){  
  9.         int len=temp.length;  
  10.         int b [][]=new int [len][len];  
  11.         for(int i=0;i<len;i++){  
  12.             for(int j=0;j<len;j++){  
  13.                 b[j][len-1-i]=temp[i][j];  
  14.             }  
  15.         }  
  16.         for(int i=0;i<len;i++)  
  17.             for(int j=0;j<len;j++)  
  18.                 temp[i][j]=b[i][j];  
  19.     }  
  20.     //输出  
  21.     public static void print1(int temp[][]){  
  22.         for(int i=0;i<temp.length;i++){  
  23.             for(int j=0;j<temp[i].length;j++){  
  24.                 System.out.print(temp[i][j]+"\t");  
  25.             }  
  26.             System.out.println();  
  27.         }  
  28.     }  
  29.