2014-04-28 124 views
1

直到現在我還看到,當有人想要逐個使用螺旋讀取矩陣的元素時,他們總是意味着開始向外並使用MxM矩陣緩慢移動到中心。我們將如何做相反的事情,從矩陣內的一個隨機點開始,並使用「螺旋」路徑來讀取所有元素。使用螺旋路徑將矩陣轉換爲矢量

我在做使用Matlab的測試。

例子。

mat= 
    1 2 3 
    4 5 6 
    7 8 9 

如果讓我們說我們是從氈(3,1)開始順時針螺旋那麼我們將不得不

vec= 
    7, 8, 4, 5, 6, 9, 1, 2, 3 

,如果我們從墊(2,2)開始,然後

vec= 
5, 6, 9, 8, 7, 4, 1, 2, 3 
+0

我猜螺旋向外應該像向內盤旋運行運行,但具有相反的方向。沒有看到你需要知道的是什麼,你已經描述了一種螺旋式的方式。除非你有更精確的要求,否則你希望你的道路能夠滿足,你的方式和任何方式一樣好,所以我沒有看到你期望的答案。我不明白你在問什麼。 – MvG

+0

就像我通常說的那些實現涉及一個MxM矩陣和一個始終從相同位置開始的螺旋。我想要做的是創建一個矢量,該矢量將沿着由可以從我們想要的任何點開始的螺旋創建的路徑。 – ealiaj

+0

@green_leaf:如果已經有部分解決問題的實施,請鏈接它們。 – Daniel

回答

2

一個可能的方法:

mat = [1 2 3; 4 5 6; 7 8 9]; 
M = length(mat); % Assuming mat is always MxM 

r = 3; 
c = 1; 

temp = spiral(2 * M - 1); 
temp = temp(M - r + 1:end - r + 1, M - c + 1:end - c + 1); 
[~, idx] = sort(temp(:)); 
vec = mat(idx).' 

ř esult與r = 3c = 1

vec = 

    7  8  4  5  6  9  1  2  3 

結果與r = 2c = 2

vec = 

    5  6  9  8  7  4  1  2  3