本帖最后由 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();
}
}
}
|