在 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
右列
对于对角线行进,行进方向上最近的边缘决定了可以到达多少个对角线方格:
- 在“左上”方向,
rowQ
或colQ
中的较小者
- 在“左下”方向,
n-rowQ-1
或colQ
中的较小者
- 在“右上”方向,
rowQ
或 n-colQ-1
中的较小者
- 在“右下”方向,较小的
n-rowQ-1
和 n-colQ-1
将所有四个加起来就是你的结果。
我有一个 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
右列
对于对角线行进,行进方向上最近的边缘决定了可以到达多少个对角线方格:
- 在“左上”方向,
rowQ
或colQ
中的较小者
- 在“左下”方向,
n-rowQ-1
或colQ
中的较小者
- 在“右上”方向,
rowQ
或n-colQ-1
中的较小者
- 在“右下”方向,较小的
n-rowQ-1
和n-colQ-1
将所有四个加起来就是你的结果。