码迷,mamicode.com
首页 > 其他好文 > 详细

某比赛小记5- 螺旋遍历矩阵

时间:2018-11-17 22:16:14      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:直接   lis   tar   没有   处理   设计   连接   二维矩阵   使用   

题目:给定一个二维矩阵,从[0][0]开始向右,按顺时针遍历全部数据,比如[[a,b][c,d]],遍历顺序就是a,b,d,c。最后将遍历的元素用逗号连接,打印整个遍历结果。给定二维矩阵见文件。

题解:本题思路很容易设计,就是每次访问越界或者是访问到已经访问的元素就向右转向,当右边没有路了则结束。难点主要是边界条件的处理。

python版本:

m = [给定矩阵]
#利用numpy构造二维全0数组
# tagnp = np.zeros(32*32)
# tagnp = tagnp.reshape(32,32)
# tagnp = tagnp.astype(int)
# tag = tagnp.tolist()
#直接构造二维全零数组
tag = [[0 for i in range(32)] for j in range(32)]  #用来存储元素是否访问过
i = 0  #当前访问元素下标记录
j = 0  #当前访问元素下标记录
ret = [] #保存访问的结果
ret.append(m[i][j])
tag[i][j] = 1
while (j+1<32 and tag[i][j+1]==0) or (i+1<32 and tag[i+1][j]==0) or (j-1>=0 and tag[i][j-1]==0) or (i-1 >=0 and tag[i-1][j]==0):
    #右
    while j+1 < 32 and tag[i][j+1] == 0:
        ret.append(m[i][j+1])
        tag[i][j+1] = 1
        j += 1
    while i+1 < 32 and tag[i+1][j] == 0:
        ret.append(m[i+1][j])
        tag[i+1][j] = 1
        i += 1
    while j-1>=0 and tag[i][j-1] == 0:
        ret.append(m[i][j-1])
        tag[i][j-1] = 1
        j -= 1
    while i-1>=0 and tag[i-1][j] == 0:
        ret.append(m[i-1][j])
        tag[i-1][j] = 1
        i -= 1
retstrlist = [] #把结果转成str,比赛时过于紧张忘记使用map()
for mi in ret:
    retstrlist.append(str(mi))
print(retstrlist)
fret = ‘,‘.join(retstrlist)
fret.replace(‘ ‘,‘‘)
print(fret) #最终结果

  

某比赛小记5- 螺旋遍历矩阵

标签:直接   lis   tar   没有   处理   设计   连接   二维矩阵   使用   

原文地址:https://www.cnblogs.com/chmod777/p/9975740.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!