本帖最后由 LPStone 于 2015-5-3 22:23 编辑  
 
n*n螺旋矩阵输出详解 
增强版螺旋矩阵,任意n*m矩阵输出。 
class Test 
{ 
        public static void main(String[] args) 
        { 
                //int size = 6; 
                int [][] arr = new int[8][8]; 
                getHelixMatrix(arr); 
                printArray(arr); 
        } 
 
        public static void getHelixMatrix(int[][] arr) 
        { 
                int n = arr.length;//获取矩阵的阶数 
                                int m = arr[0].length; 
                int l = n<m?(n + 1)/2 : (m + 1)/2; 
                int x = 0, y = 0; 
                int k = 1; 
                for(int i = 0;i < l;i++) 
                { 
                        //把顶边存入数组中 
                        for(x = i;x <= (m - 1) - i;x++) 
                        { 
                                arr[y][x] = k++;//注意行和列下标的对应,别搞反了!         
                                System.out.println("arr["+y+"]["+x+"]="+arr[y][x]+"\t"); 
                                                                if(k > n*m) 
                                                                        return; 
                        } 
                        System.out.println(); 
                        x--;//for的控制条件x++ 最后给x多加了1 ,在此处需要减去                         
 
                        //把右边存入数组中 
                        for(y = i + 1;y <= (n - 1) - i ;y++) 
                        { 
                                arr[y][x] = k++; 
                                System.out.println("arr["+y+"]["+x+"]="+arr[y][x]+"\t"); 
                                                                if(k > n*m) 
                                                                        return; 
                        } 
                        System.out.println(); 
                        y--;//前一个for的控制条件y++ 最后给y多加了1 ,在此处需要减去 
 
                        //把底边存入数组中 
                        for(x = (m - 1) - i - 1 ;x >= i;x--) 
                        { 
                                arr[y][x] = k++; 
                                System.out.println("arr["+y+"]["+x+"]="+arr[y][x]+"\t"); 
                                                                if(k > n*m) 
                                                                        return; 
                        } 
                        System.out.println(); 
                                                x++; 
 
                                                //把左边存入数组中 
                                                 for(y = (n- 1) - i - 1;y >= i + 1;y--) 
                        { 
                                arr[y][x] = k++; 
                                System.out.println("arr["+y+"]["+x+"]="+arr[y][x]+"\t"); 
                                                                if(k > n*m) 
                                                                        return; 
                        } 
                        System.out.println(); 
                                                y++;                 
                } 
 
        } 
 
        public static void printArray(int [][] arr) 
        { 
                int n = arr.length;//获取矩阵的阶数 
                int m = arr[0].length; 
                for(int i = 0;i < n;i++ ) 
                { 
                        for(int j = 0;j < m;j++) 
                        { 
                                System.out.print(arr[j]+"\t"); 
                        } 
                        System.out.println(); 
                } 
        } 
} 
 
 |