Доступ к диагонали конкретной ячейки в матрице - PullRequest
0 голосов
/ 12 апреля 2019

Решая проблему 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 && i==j){
                    //csp[row][col]=1;
                    csp[i][j]=1;
                }
                if(row+count==i && col+count==j){
                    csp[i][j]=1;
                }

            }
            count++;
        }

        return csp;
    }

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

if(row+count==i && 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 Ответ

0 голосов
/ 13 апреля 2019

Ваше состояние

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

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

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

  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;
  }
...