Я пытаюсь найти ожидаемый результат для программы ниже. Но я получаю сообщение об ошибке
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at programbasics.CountingConnections.count(CountingConnections.java:7)
at programbasics.CountingConnections.main(CountingConnections.java:26)
Мой вопрос о матрице m * n .Элементы в матрице заполняются значениями 1 и 0 .
1 указывает на установление соединения, а 0 указывает на не установление соединения.
нам нужно соединить доступные соседние позиции по вертикали, горизонтали и диагонали и подсчитать количество различных соединений установлено
Мой код
package programbasics;
class CountingConnections
{
static int count(int a[][], int i, int j) {
int rows = a.length;
int cols = a[0].length;
if(a[i][j] == 0) return 0;
if (i == rows - 1 && j == cols - 1)
return a[i][j];
else if (i == rows - 1)
return a[i][j + 1];
else if (j == cols - 1)
return a[i + 1][j];
else if (a[i][j] == 1)
return count(a, i + 1, j) + count(a, i, j + 1);
else
return 0;
}
public static void main(String[]args)
{
int a[][] = {{1,0,0,1},
{0,1,1,1},
{1,0,0,1}};
int i = 3;
int j = 4;
System.out.println(count(a, i, j));;
}
}
Ожидаемый результат - 8 .Аналогично позиции связаны следующим образом:
1) (0,0) -> (1,1)
2) (2,0) -> (1,1)
.
.
.
.
8) (0,3) -> (1,3)
Не удается получить ожидаемый результат 8 .
public static int count(int[][] a) {
int[][] paths = new int[a.length][a[0].length];
if ((paths[0][0] = a[0][0]) == 0) {
return 0;
}
for (int c = 1; c < a[0].length; c++) {
paths[0][c] = a[0][c] * paths[0][c - 1];
}
for (int r = 1; r < a.length; r++)
{
paths[r][0] = a[r][0] * paths[r - 1][0];
for (int c = 1; c < a[r].length; c++)
{
paths[r][c] = a[r][c] * (paths[r - 1][c] + paths[r][c - 1]);
}
}
return paths[a.length - 1][a[0].length - 1];
}