在 java 中计算皇后可以从棋盘上的特定位置攻击的对角线数量时出现运行时错误

Runtime error when counting the number of diagonals Queen can attack from a specific position on chessboard in java

我有一个 n*n 棋盘,其中 0

皇后可以放在棋盘上的任何位置。

有没有method/formula计算女王从指定位置可以走多少条对角线?

我尝试使用 if-else 循环来计算它,对于较短的 2d 棋盘我得到了正确答案,但是对于长度为 100000 的数组,我遇到了运行时错误。

我的代码:

         if(rowQ<n-1 && colQ<n-1) {         //n:size of array
            int row=rowQ;                   //rowQ and colQ: row and column 
            int col=colQ;                   //of the queen.
            while(row<n-1 && col<n-1) {     //Capture: number of squares
                row++;                      //queen can visit.
                col++;
                capture++;                   
                
            }
            
        }
        if(rowQ>0 && colQ>0) {
            int row=rowQ;
            int col=colQ;
            while(row>0 && col>0) {
                row--;
                col--;
                capture++;
                
            }
                
        }
        if(rowQ>0 && colQ<n-1){
            int row = rowQ;
            int col = colQ;
            while(row>0 && col < n-1){
                row--;
                col++;
                capture++;
            }
            
        }
        if(rowQ<n-1 && colQ>0){
            int row = rowQ;
            int col = colQ;
            while(row<n-1 && col >0){
                row++;
                col--;
                capture++;
            
            }
        }
                    

没有必要一个一个地数出方格。您只需要知道女王的位置和 n

以第 0 行为“上”,第 n-1 行为“下”,第 0 列为“左”,第 n-1 列为“右”,rowQ 处的皇后, colQ 最多可以旅行:

  • rowQ 行,
  • n-rowQ-1 向下行
  • colQ 列剩余
  • n-colQ-1 右列

对于对角线行进,行进方向上最近的边缘决定了可以到达多少个对角线方格:

  • 在“左上”方向,rowQcolQ
  • 中的较小者
  • 在“左下”方向,n-rowQ-1colQ
  • 中的较小者
  • 在“右上”方向,rowQn-colQ-1
  • 中的较小者
  • 在“右下”方向,较小的 n-rowQ-1n-colQ-1

将所有四个加起来就是你的结果。