答案取決於是否存儲所述列或矩陣的行。假設你有一個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
(模量)。從這一點開始,您可以選擇從m
到n
以及每個數組中的每個數組,直到最近的元素與您的原始元素相同。
在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]]
然後m
和p
被反轉,這意味着從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;
}
但糾正我,如果我錯了:)
這功能嗎? – 2009-11-15 10:45:26
好吧,它是半功課,它是一個assignmnet的一部分是的,但這是一種解決我自己採取的問題的方法,而不是明確設置我們遵循和做的事 – simon 2009-11-15 10:47:43
對我來說這似乎是一個困難的方式解決一個簡單的問題。但我不確定你那邊的邊緣。我如何閱讀它?邊緣是單向的嗎?只應該從節點開始計算邊緣?否則,您的示例數組自相矛盾。對我來說它說節點3有4個邊到節點2,但節點2有2個邊到節點3. – crunchdog 2009-11-15 11:11:42