Учитывая сетку из nxn квадратов, где у каждого квадрата есть идентификатор, первый (верхний левый) квадрат имеет идентификатор 0 (таким образом, у сетки 5x5 будут идентификаторы 0-24), как показано ниже:
00 01 02 03 04
05 06 07 08 09
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
Мне нужно сгенерировать все диагональные решения длины Y. Так что, если Y равен 3, то некоторые из решений будут:
0,6,12
и
11,17,23
, но, очевидно, НЕ
3,9,15 (because the 15 does not follow on diagonally)
Есть идеи, как можно сгенерировать эти решения?
Это то, что у меня есть (размерность = 5, inARow = 3):
public ArrayList<int[]> getSolutions(int dimension, int inARow) {
ArrayList<int[]> solutions = new ArrayList<int[]>();
//create row solutions
for(int i=0; i<dimension*dimension; i = i+dimension) {
for(int j=i; j<=i+dimension - inARow; j++){
int[] row = new int[inARow];
int counter = 0;
for(int k=j; k<j+inARow; k++){
row[counter++] = k;
}
solutions.add(row);
}
}
//create column solutions
for(int i=0;i<dimension;i++){
for(int j=i; j<(dimension*dimension)-(dimension*inARow)+dimension;j=j+dimension){
int[] col = new int[inARow];
int counter = 0;
for(int k=j;k<j+(dimension*inARow);k=k+dimension){
col[counter++] = k;
}
solutions.add(col);
}
}
//create diagonals
for(int i=0; i<dimension*dimension; i++){
for(int j=i; j<i+(dimension * inARow); j = j+dimension+1){
System.out.println(j);
}
}
return solutions;
Это дает мне все диагональные решения, но также и плохие, такие как 3,9,15.У меня проблемы с их устранением.
Антидиагоналы также являются решениями, поэтому 2,6,10 также будет решением, но если я получу нормальные диагонали, я, вероятно, могу сделать то же самое для антидиагоналей.