2024年10月30日 星期三

雙向螺旋矩陣

 import math

n1 = int(input())

for i in range(n1):

  m,d1 = map(int,input().split())


  n = m**2

  if d1==1:

    d=[[0]*m for _ in range(m)]

    

    k = 1

    r,c = 0,0

    dirn = 0

    dirs = [[0,1],[1,0],[0,-1],[-1,0]] 

    

    while k<=n:

      d[r][c]=k

      k+=1

      

      nr,nc = r+dirs[dirn][0],c+dirs[dirn][1]

      if  nr<m and nc<m and d[nr][nc]==0 :

          r,c = nr,nc

      else:

          dirn=(dirn+1)%4

          r,c = r+dirs[dirn][0],c+dirs[dirn][1]

    

    for row in d:

      formatted_row = " ".join(str(num).rjust(5) if num!=0 else " "*5  for num in row)

      print(formatted_row)

    print()

  else:

    d=[[0]*m for _ in range(m)]

    

    k = 1

    r,c = 0,0

    dirn = 0

    dirs = [[1,0],[0,1],[-1,0],[0,-1]] 

    

    while k<=n:

      d[r][c]=k

      k+=1

      

      nr,nc = r+dirs[dirn][0],c+dirs[dirn][1]

      if  nr<m and nc<m  and d[nr][nc]==0 :

          r,c = nr,nc

      else:

          dirn=(dirn+1)%4

          r,c = r+dirs[dirn][0],c+dirs[dirn][1]

    

    for row in d:

      formatted_row = " ".join(str(num).rjust(5) if num!=0 else " "*5  for num in row)

      print(formatted_row)

    print()

沒有留言:

張貼留言