某比賽小記5- 螺旋遍歷矩陣
阿新 • • 發佈:2018-11-19
題目:給定一個二維矩陣,從[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) #最終結果