Каждое значение B
можно рассчитать как:
B(i,j) = B(i-1,j-1) + B((i-1,j) - (i-1,j-1)) + A(i,j) + B((i,j-1)-(i-1,j-1))
Это потому что:
Диагональное значение (i-1, j-1) - сумма всех левого и верхнего значений (i, j), исключая непосредственные верхнее и левое значения.
Левое значение (i, j-1) - сумма непосредственных левых значений + диагональное значение.
Верхнее значение (i-1, j) представляет собой сумму непосредственных верхних значений + диагональных значений.
Итак, путем объединения этих 3 значений и текущего элемент, мы получаем значение B (i, j)
Вот обновленный код:
public static void main(String args[]) {
int[][] arrA = { { 1, 1,0 }, { 1, 1,0 },{ 1, 1,0 } };
int [][]B = new int [3][3];
int diag, i, j,top,left;
int len = arrA.length;
int bredth = arrA[0].length;
for( i=0;i<len;i++){
for( j=0;j<bredth;j++) {
diag = 0; top=0; left=0;
if(i-1>=0 && j-1>=0) {
diag = B[i-1][j-1];
}
if(i-1>=0) {
top = B[i-1][j];
}
if(j-1>=0) {
left = B[i][j-1];
}
B[i][j] = diag + arrA[i][j] + (top-diag) + (left-diag);
}
}
for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
System.out.print(B[i][j]);
}
System.out.println();
}
}
Проблема с вашим кодом заключается в том, что вы просто добавляете indexes
и не учитываете values
. Но по вашему вопросу каждое значение B должно быть равно sum of corresponding entry in A, plus all entries to the left and above it
for(int r=0; r < arrB.length; r++) {
for(int c=0; c < arrB[r].length; c++) {
// if((r==0 || r==(arrA.length-1)) || (c==0 || c==(arrA.length-1)) )
arrB[r][c] = r+c; //Here `r` and `c` are just indexes value not actual value
System.out.print(arrB[r][c]+" ");
}
System.out.println();
}