首页 > 试题广场 >

反螺旋矩阵

[问答题]
反螺旋矩阵:随机给定N*M个数(无重复),先将这N*M个数排序,然后升序放置到螺旋矩阵当中:
如,给定3*5共15个数1-15,则螺旋矩阵输出如下:
1   2  3  4  5
14 15 16 17 6
13 20 19 18 7
12 11 10 9 8
推荐

N = 4
M = 5
l = []
for i in xrange(1, 1 + N*M):
 l.append(i)

m = [[None]*M for i in xrange(N)]
step = [(0, 1), (1, 0), (0, -1), (-1, 0)]
d = 0
s = (0, 0)

for num in l:
 m[s[0]][s[1]] = num
 ns = (step[d][0] + s[0], step[d][1] + s[1])
 if ns[0] >= N or ns[1] >= M or m[ns[0]][ns[1]] is not None:
 d = (d + 1) % 4
 ns = (step[d][0] + s[0], step[d][1] + s[1])
 s = ns

for i in m:
 print i

编辑于 2014-12-30 20:14:59 回复(0)
//>说明:“编号2015 的答案”中得不到正确的结果,但是思路是正确的。下面是改正后的结果。
while (i<n*m)
    {    
        for (j = l;j<m-k;j++)
            B[k][j] = A[i++];

        for (j = l+1;j<n-l;j++)
            B[j][m-1-k] = A[i++];

        for (j = m-2-k;j>=k;j--)
            B[n-1-l][j] = A[i++];

        for (j = n-2-l;j>l;j--)
            B[j][k] = A[i++];

        k++; //表示已经写过的列数
        l++; //表示已经写过的行数
    }
发表于 2015-05-04 16:31:30 回复(0)