回形矩阵--python

def bsm(n):
    a = [[0]*n for x in range(n)]
    p = 0
    q = n-1
    t = 1
    while p < q:
        for i in range(p,q):
            a[p][i] = t
            t += 1

        for i in range(p,q):
            a[i][q] = t
            t += 1

        for i in range(q,p,-1):
            a[q][i] = t
            t += 1

        for i in range(q,p,-1):
            a[i][p] = t
            t += 1
        p += 1
        q -= 1
    if q == p:
        a[p][p] = t
    return a

这个是一个函数,返回一个回形数组

具体的思路是,用p记录左上角的坐标,用q记录右下角的坐标,一圈一圈的向矩阵的里面赋值,最终得到一个回形矩阵,最后的一个判断 if p==q 是因为奇数和偶数不不一样引起的差异,如果是奇数经历了while循环后,最后中间还有一个值是空的,如果是偶数的话,不存在p == q的情况,因为每次循环p都加1,q都减一,岔开了。