2009-11-15 78 views
0

我想知道如果我可以有一些僞代碼用於解決以下問題如果可能,需要僞代碼嗎?

我需要通過2d數組循環(我正在使用的方法需要一個int)。它從傳入值的位置開始,然後向下,直到它在左側達到相同的值。在這樣做的時候,2d數組中的每個int都被添加到局部變量中。 現在我們在位置(x,x)了嗎?然後從這裏我需要循環對面將所有變量同前面的局部變量右邊,然後返回數

爲了說明旨意二維數組看起來像這樣的例子

1 2 3 4 
2 3 4 5 
1 2 3 4 
3 2 1 4 

所以,如果我想通過2我們會開始在第3條頂部線我猜,我們會循環下去,直到位置3,3(3 + 4 + 3),然後向右循環直到結束(+ 4)

這些號碼將被添加並返回。

我希望僞代碼是可能的,我還沒有剛剛給它已經自己笑(從而證明我不能實際代碼時笑:d)

如果沒有任何例子,你可以提供給我,我幫我出:d

謝謝你們

+0

這功能嗎? – 2009-11-15 10:45:26

+0

好吧,它是半功課,它是一個assignmnet的一部分是的,但這是一種解決我自己採取的問題的方法,而不是明確設置我們遵循和做的事 – simon 2009-11-15 10:47:43

+0

對我來說這似乎是一個困難的方式解決一個簡單的問題。但我不確定你那邊的邊緣。我如何閱讀它?邊緣是單向的嗎?只應該從節點開始計算邊緣?否則,您的示例數組自相矛盾。對我來說它說節點3有4個邊到節點2,但節點2有2個邊到節點3. – crunchdog 2009-11-15 11:11:42

回答

0

我想這應該僞代碼你在找什麼:

array[][] := ... 
position := ... 
sum := 0 

//add the contents of the outer array 
for i := 0 to array.length do 
    sum := sum + array[i][position] 

    //if we're at (pos, pos) then start looping over the inner array 
    if i = position then 

     //note we start at pos + 1 so as not to count array[i][position] twice 
     for j := position + 1 to array[j].length do 
      sum := sum + array[i][j] 
     end 

     break from loop 

    end 
end 
+0

沒問題。當你實現它的時候,你可能會想要添加一些額外的錯誤處理代碼,以確保該方法所處的位置在數組的邊界內(例如少於array.length)。 – 2009-11-15 15:03:22

0

不知道你想達到什麼目的,我以爲這只是一項任務。 如果你正在向右循環,那麼不應該包含1,如果不是2也是如此?

即然後循環到右側,直到結束(1 + 4)

+0

他向下循環,而不是向右。 – 2009-11-15 10:44:18

+0

是的,這是一個assignmnet,但這是我需要解決的一個側面問題,以實現分配,我需要確定圖中的每個節點是否有邊緣。所以如果我檢查節點3.節點3有邊緣 (3,0)(3,1)(3,2)(3,3(不知道這個))(4,3) 不不如果這可以解決它呢? – simon 2009-11-15 10:44:50

0

答案取決於是否存儲所述列或矩陣的行。假設你有一個n * n大小矩陣和您存儲行,所以

A = [[1,2,3,4], [2,3,4,5], [1,2,3,4], [3,2,1,4]] 

和出發點是i,則應該從陣列去沒有。 m = i div n(除法的整數部分,向下舍入),並且在數組內,起始元素應該是no。 p = i mod n(模量)。從這一點開始,您可以選擇從mn以及每個數組中的每個數組,直到最近的元素與您的原始元素相同。

在Java類代碼:

int n = 4; 
int[][] A = new int[n][n]; 
... // initialize A 

int sumValues(int i) { 
    int original = A[i/n][i%n]; 
    int sum = original; 
    int p = i % n; 

    for (m = i/n + 1, m<n, ++m) { 
     if (A[m][p] != orginal) sum += A[m][p]; 
     else break; 
    } 

    return sum; 
} 

如果要存儲的列,所以

A = [[1,2,1,3], [2,3,2,2], [3,4,3,1], [4,5,4,4]] 

然後mp被反轉,這意味着從A你應該選擇數組沒有。 m = i mod n並在該數組內,元素號。 p = i div n。在此之後,您將停留在您選擇的陣列中,並且只需增加p,直到A[m][p]等於最初選定的值。

在Java類代碼:

int n = 4; 
int[][] A = new int[n][n]; 
... // initialize A 

int sumValues(int i) { 
    int original = A[i%n][i/n]; 
    int sum = original; 
    int p = i/n; 

    for (p = i/n +1, p<n, ++p) { 
     if (A[m][p] != orginal) sum += A[m][p]; 
     else break; 
    } 

    return sum; 
} 

但糾正我,如果我錯了:)