Re: [討論] 排列問題

看板MATLAB作者 (beyond the time!)時間7年前 (2017/05/12 10:50), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《joehome (三碗豬腳)》之銘言: : 如何將有順序的64個數值 排成矩陣(螺旋排列) : 目前可以一列一列的排 : 想請教螺旋排列 : 有語法嗎 : ----- : Sent from JPTT on my iPhone 這問題很簡單, 你應該要仔細畫圖把 1,4,9,16,...,k^2 個數值的順序畫出來, 寫個遞迴式就結束了. 以下是順時排列的code, 10分鐘就能寫好. 建議你想一下之後,把其他的排列方式自己補完吧. == function Mapping_Mtx = spiral_mapping( m_current_Lv ) % writtend by STARSTAR (YoursEver@Ptt.cc) if m_current_Lv > 1 Prev_Mtx = spiral_mapping( m_current_Lv-1 ); Array_Number_thisLv = (1+(m_current_Lv-1)^2):1:m_current_Lv^2; if mod(m_current_Lv,2)==0 buffer = zeros( size(Prev_Mtx) + [1 1]); buffer(1:size(Prev_Mtx,1), 1:size(Prev_Mtx,2)) = Prev_Mtx(:,:); buffer(:, end) = Array_Number_thisLv(1:ceil(end/2)); buffer(end,1:end-1) = Array_Number_thisLv( end:-1:ceil(length(Array_Number_thisLv)/2+1) ); Mapping_Mtx = buffer; else %mod(m_current_Lv,2)==1 buffer = zeros( size(Prev_Mtx) + [1 1]); buffer(end-size(Prev_Mtx,1)+1:end, end-size(Prev_Mtx,2)+1:end) = Prev_Mtx(:,:); buffer(1, :) = Array_Number_thisLv(ceil(end/2):1:end); buffer(end:-1:2,1) = Array_Number_thisLv( 1:1:floor(length(Array_Number_thisLv)/2 )); Mapping_Mtx = buffer; end else%if m_current_Lv==1 Mapping_Mtx = [1]; end end -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.22.216 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1494557411.A.00B.html

05/12 15:19, , 1F
感謝您
05/12 15:19, 1F
文章代碼(AID): #1P5IBZ0B (MATLAB)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
4
完整討論串 (本文為第 2 之 2 篇):
1
4
文章代碼(AID): #1P5IBZ0B (MATLAB)