题解 | #蛇形矩阵#有限状态机解蛇形矩阵

蛇形矩阵

http://www.nowcoder.com/practice/f228a074c5274619b26be544962375e1

看注释解析还是比较简单的,只有4条规则约束

n = int(input())
state = 0
x,y=0,0
position=[[-1 for _ in range(0,n)] for _ in range(0,n)]
trace=[]
cnt = 0
allstate=[[1,-1],[-1,1]]
direction=[[1,0],[0,1]]
# 分别为右上,左下,右,下。
for i in range(0,n**2):
    cnt += 1
    position[x][y] = cnt
    x += allstate[state%2][0]
    y += allstate[state%2][1]
#先向右上移动,如果到墙角了,就回退并且向右走一格
    if (state%2 == 0 or state == 0) and (x>=n or x<0 or y>=n or y<0):
        x -= allstate[state%2][0]
        y -= allstate[state%2][1]
        state += 1
        x += direction[0][0]
        y += direction[0][1]
#向右走一格失败则回退并向下走
        if(x>=n or x<0 or y>=n or y<0):
            x -= direction[0][0]
            y -= direction[0][1]
            x += direction[1][0]
            y += direction[1][1]
            
#先向右上移动,如果到墙角了,就回退并且向右走一格 
    if (state%2 != 0 or state == 1) and (x>=n or x<0 or y>=n or y<0):
        x -= allstate[state%2][0]
        y -= allstate[state%2][1]
        state+=1
        x += direction[1][0]
        y += direction[1][1]
 #向下走一格失败则回退并向右走
        if(x>=n or x<0 or y>=n or y<0):
            x -= direction[1][0]
            y -= direction[1][1]
            x += direction[0][0]
            y += direction[0][1]
        

for i in range(0,n):
    for j in range(0,n):
        print(position[j][i],end=" ")
    print()
    
全部评论

相关推荐

11-23 15:14
中原工学院 Java
程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
11-11 16:40
已编辑
门头沟学院 人工智能
不知道怎么取名字_:这个有点不合理了,相当于已经毕业了,但还是没转正,这不就是白嫖
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务