// 生成下一步可行的所有走法 vector<pair<int, int> > generate_next_moves() { vector<pair<int, int> > next_moves; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (gridInfo[i][j] == 0) { next_moves.push_back({ i,j }); } } } return next_moves; }改代码,不需要遍历整个棋局,只考虑有棋子的周围一定范围的位置,让代码更高效
时间: 2024-03-04 07:49:25 浏览: 18
可以考虑将遍历整个棋局的双重循环改为遍历有棋子的周围一定范围的位置。具体实现可以使用一个辅助数组记录棋子的位置,然后在其周围一定范围内遍历,找到空位即可。示例代码如下:
```
const int RADIUS = 2; // 周围范围半径
bool has_piece[N][N]; // 辅助数组记录棋子的位置
// 初始化 has_piece 数组
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
has_piece[i][j] = (gridInfo[i][j] != 0);
}
}
// 遍历有棋子的周围一定范围的位置生成下一步可行的所有走法
vector<pair<int, int>> generate_next_moves() {
vector<pair<int, int>> next_moves;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (!has_piece[i][j]) { // 如果该位置为空
// 遍历周围一定范围内的位置
for (int x = max(0, i - RADIUS); x <= min(N - 1, i + RADIUS); x++) {
for (int y = max(0, j - RADIUS); y <= min(N - 1, j + RADIUS); y++) {
if (has_piece[x][y]) { // 如果周围有棋子
next_moves.push_back({ i, j });
break; // 找到一个可行的位置就退出循环
}
}
}
}
}
}
return next_moves;
}
```
这样,就可以避免遍历整个棋局,提高代码效率。