【问题标题】:Access diagonals of a particular cell in matrix访问矩阵中特定单元格的对角线
【发布时间】:2019-04-12 15:54:50
【问题描述】:

解决 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 

回溯现在不是问题。

【问题讨论】:

    标签: java arrays if-statement matrix logic


    【解决方案1】:

    你的情况

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

    只有在 row==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;
      }
    

    【讨论】:

      猜你喜欢
      • 2019-03-10
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 2020-02-05
      • 1970-01-01
      相关资源
      最近更新 更多