打印蛇形矩阵

打印蛇形矩阵

就是这样的矩阵


[[ 1.  2.  6.  7. 15. 16. 28.]
 [ 3.  5.  8. 14. 17. 27. 29.]
 [ 4.  9. 13. 18. 26. 30. 39.]
 [10. 12. 19. 25. 31. 38. 40.]
 [11. 20. 24. 32. 37. 41. 46.]
 [21. 23. 33. 36. 42. 45. 47.]
 [22. 34. 35. 43. 44. 48. 49.]]



或者是这样的.


[[ 1.  3.  4. 10. 11. 21. 22.]
 [ 2.  5.  9. 12. 20. 23. 34.]
 [ 6.  8. 13. 19. 24. 33. 35.]
 [ 7. 14. 18. 25. 32. 36. 43.]
 [15. 17. 26. 31. 37. 42. 44.]
 [16. 27. 30. 38. 41. 45. 48.]
 [28. 29. 39. 40. 46. 47. 49.]]

完全的解释代码如下


import numpy as np
def main(n, direction=False):
    """n : type int n>=1."""
    assert n>=1
    matrix = np.zeros((n,n))
    right = direction ## 一种是先往下,还有一种是先往右的
    x=1
    y=1
    for i in range(1,n*n+1):
        ##每一次循环都是先把第i个元素放好,然后算出下一个元素该放哪个位置,还有下一步该往哪个方向走
        ##比如最初right=False说明即接下来的一步的方向是向下,
        ##每一次for 走到下边的时候就会把x,y,right算好,其中的x,y就是下一个元素的位置,以及填完它之后,下一步的方向.
        matrix[x-1][y-1] = i
        if right:  # 指的是填完上面的matrix[x-1][y-1]=i 之后,往哪里走.
            if (x==1 or y+1>n):   # 可能改变方向的地方.
                # 边的时候改方向
                right = False   #这个是要更改的下下一步的方向. 但是xy是下一步要确定的位置,
                if y+1>n:  # 这时候走到右边的边上了,下一步就该往下面走了,所以x+=1,而y不变
                    x+=1
                else: # 说明这时候在第一行但是下一次要往右走一步
                    y+=1
            else:  ##如果不是走到边上了,就往左下角走,即x变小,y变大
                x-=1
                y+=1
        else:  ##否则就是往左下方走的
            if y==1 or x+1>n:  ## 仍然是先
                right = True
                if x+1>n:  #说明这一斜着的地方填完了,该进入下一个斜的去填了,因此要先平着往右边的一列走一下.
                    y+=1
                else:  # 如果不是走到头的话,说明这时候也是这一小的斜列走完了,但是不是往右,而是往下.
                    x+=1
            else:   # 不满足上面的话,说明正在往左下方的方向填斜着的列.
                x+=1
                y-=1
    return matrix
import sys
try:
    print(main(int(sys.argv[1]), sys.argv[2]))
except:
    print(main(int(sys.argv[1])))


打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦