某比赛小记5- 螺旋遍历矩阵
Posted chmod777
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了某比赛小记5- 螺旋遍历矩阵相关的知识,希望对你有一定的参考价值。
题目:给定一个二维矩阵,从[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- 螺旋遍历矩阵的主要内容,如果未能解决你的问题,请参考以下文章