螺旋矩阵java代码 螺旋矩阵java实现( 二 )


2122................
2078910
1961211
1854312
1716 15 14 13
的矩阵 。
问题有两个螺旋矩阵java代码:
1. 编程实现输出这个矩阵
2. 设1点的坐标是(0,0),x方向向右为正,y方向向下为正.例如:7的坐标为(-1,-1) ,2的坐标为(0,1),3的坐标为(1,1).编程实现输入任意一点坐标(x,y),输出所对应的数字 。
1. 第一个问题螺旋矩阵java代码我是采用模拟进行构造的,可以看到从1开始的方向变化始终是 right-down-left-up , 
所持续走的长度为1-1-2-2-3-3-...,发现了这个规律不难写出代码了螺旋矩阵java代码!注意下面我把1的位置设置
在((n-1)/2, (n-1)/2)的位置 。
void Simulate(int n)
{
int x, y;
x = y = (n - 1) / 2; //1的位置
data[x][y] = 1;
int len = 1;
int count = 0;
int num = 2;
DIRECTION dir = RIGHT;
while(num= n * n)
{
for(int i = 0; ilen; i++)
【螺旋矩阵java代码 螺旋矩阵java实现】{
switch(dir)
{
case LEFT:
--y;break;
case RIGHT:
++y;break;
case UP:
--x;break;
case DOWN:
++x;break;
default:break;
}
data[x][y] = num++;
}
count++;
if(count == 2)
{
count = 0;
len++;
}
dir = (DIRECTION)((dir + 1) % 4);
}
}
2. 第二个问题我也是先找出规律 , 然后进行模拟 。
首先,不难看出n*n的螺旋矩阵的右下角的坐标一定是(m, m),这里m=n-1
通过观察,可以看出 n=1的时候,右下角(0,0)的值为1,当n=2的时候,右下角(1,1)的坐标值为(3,3) , 当n=3的时候,右下角(2,2)的坐标值为13.直觉告诉我,这个值是关于n的二次函数,设f(n) = a*n^2 + b*n + c
联立方程组,可以求得a,b,c 。最终算出来的f(n) = 4*n^2 - 2*n + 1
下面再根据(x,y)和右下角(n-1,n-1)之间的关系,计算出值即可 。这里要注意当x的值与n-1相同时,应优先考虑y与-m是否有联系 。这就要求在函数中要注意x,y的判断先后顺序了 。
代码如下:
//以(1,1)所在位置作为原点,向右作为x正半轴 , 向下作为y正半轴
int GetValue(int x, int y)
{
int m = max(abs(x), abs(y));
int rightBottom = m * m * 4 - 2 * m + 1;
int value = https://www.04ip.com/post/0;
if(x == -m)
{
value = https://www.04ip.com/post/rightBottom + 2 * m + m - y;
}
else if( y == m)
{
value = https://www.04ip.com/post/rightBottom + m - x;
}
else if(y == -m)
{
value = https://www.04ip.com/post/rightBottom + 4 * m + x + m;
}
else if( x == m )
{
value = https://www.04ip.com/post/rightBottom - (m - y);
}
return value;
}
java二维数组3*3螺旋矩阵实例 , 请解释下循环的过程public class T {
public static void main(String[] args) {
int i,j;
int[][] a = {{1,1,1},{2,2,2},{3,3,3}};
int[][] b = new int[3][3];
System.out.print("初始矩阵:\n");
for(i=0;i3;i++) {
for(j=0;j3;j++) {
System.out.print(a[i][j]+"");
}
System.out.print("\n");
}
System.out.print("转置矩阵:\n");
for(i=0;i3;i++) {
for(j=0;j3;j++) {
b[i][j] = a[j][i];
System.out.print(b[i][j]+"");
}
System.out.print("\n");
}
}
}
螺旋矩阵C++源代码#include iostream
using namespace std;
void Generate(int** Array, int r0, int r1, int c0, int c1, int fangxiang, int tempStartNum)
{
switch (fangxiang)
{
case 1:
for (int c = c0 ; c = c1 ; ++c)
{
Array[r0][c] = tempStartNum;
++tempStartNum;
}
fangxiang = 2;
r0++;

推荐阅读