Доступ к диагоналям конкретной ячейки в матрице

#java #arrays #if-statement #matrix #logic

#java #массивы #if-оператор #матрица #Логические

Вопрос:

Решение проблемы с 8 королевами я на самом деле застрял в том, как получить доступ к диагоналям конкретной ячейки, чтобы установить ее равной 1 при размещении королевы. Существует простая логика для ячеек, которые находятся по вертикали или горизонтали выбранной ячейки, где должна быть размещена королева.

Вот код моей функции для установки ячеек для ферзя на 1, которые эта королева может атаковать.

 static int[][] SetPos(int csp[][],int row,int col){
        int count = 0, n = csp.length;
        for (int i = 0; i < csp.length; i  ) {
            for (int j = 0; j < csp.length; j  ) {
                if(i==row || j==col){
                    csp[i][j]=1;
                }

                if(row==col amp;amp; i==j){
                    //csp[row][col]=1;
                    csp[i][j]=1;
                }
                if(row count==i amp;amp; col count==j){
                    csp[i][j]=1;
                }

            }
            count  ;
        }

        return csp;
    }
  

Как можно улучшить это условие:

 if(row count==i amp;amp; col count==j){
      csp[i][j]=1;
}
  

Так что я получаю результат для ячейки (5,5) как :

  1  0  0  0  0  1  0  0 
 0  1  0  0  0  1  0  0 
 0  0  1  0  0  1  0  0 
 0  0  0  1  0  1  0  1 
 0  0  0  0  1  1  1  0 
 1  1  1  1  1  1  1  1 
 0  0  0  0  1  1  1  0 
 0  0  0  1  0  1  0  1 
  

не так :

  1  0  0  0  0  1  0  0 
 0  1  0  0  0  1  0  0 
 0  0  1  0  0  1  0  0 
 0  0  0  1  0  1  0  0 
 0  0  0  0  1  1  0  0 
 1  1  1  1  1  1  1  1 
 0  0  0  0  0  1  1  0 
 0  0  0  0  0  1  0  1 
  

Обратное отслеживание сейчас не является проблемой.

Ответ №1:

Ваше условие

   if(row==col amp;amp; i==j){
        //csp[row][col]=1;
        csp[i][j]=1;
  }
  

должно работать только в том случае, если строка == col.
В противном случае вы получите только горизонтальные и вертикальные числа.

Если вы хотите пометить диагонали, начиная с row и col, этот код должен работать:

   if(i-j==row-col){ //diagonal up_left to down_right
        csp[i][j]=1;
  }

  if(i j==row col) { //diagonal down_left to up_right
        csp[i][j]=1;
  }