首页 > 试题广场 >

反螺旋矩阵

[问答题]
反螺旋矩阵:随机给定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)
import numpy as np

N,M=map(int,input().split())
A=np.array(list(map(int,input().split())))
A.sort()
B=[[None for _ in range(M)] for _ in range(N)]
i=0
j=0
k=0
direction=0
while i<M*N:
    if direction==0:
        if k==M&nbs***bsp;B[j][k]!=None:
            direction=1
            j+=1
            k-=1
        else:
            B[j][k]=A[i]
            k+=1
            i+=1
    elif direction==1:
        if j==N&nbs***bsp;B[j][k]!=None:
            direction=2
            k-=1
            j-=1
        else:
            B[j][k]=A[i]
            j+=1
            i+=1 
    elif direction==2:
        if k<0&nbs***bsp;B[j][k]!=None:
            direction=3
            j-=1
            k+=1
        else:
            B[j][k]=A[i]
            k-=1
            i+=1
    else:
        if j<0&nbs***bsp;B[j][k]!=None:
            direction=0
            k+=1
            j+=1
        else:
            B[j][k]=A[i]
            j-=1
            i+=1
for i in range(N):
    for j in range(M):
        print(B[i][j],end=' ')
    print()

发表于 2025-09-10 20:46:14 回复(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)