U8单元测评.编程题1
2025-10-26 11:20:33
发布于:浙江
Unit 8 单元测评 编程题1
以下是AI给的代码 ( 保留注释 , 未简化数组名、变量名、自定义数组名)
#include <iostream>
#include <vector>
#include <string>
#include <queue>
using namespace std;
// 定义一个结构体来存储位置和跳跃次数
struct Node {
int x, y;
int jumps;
Node(int x, int y, int jumps) : x(x), y(y), jumps(jumps) {}
};
const int dirs[8][2] = {{-2, -1}, {-2, 1}, {-1, -2}, {-1, 2}, {1, -2}, {1, 2}, {2, -1}, {2, 1}};
int findMinJumps(vector<string>& grid, int startX, int startY, int endX, int endY) {
int R = grid.size(), C = grid[0].size();
vector<vector<bool>> visited(R, vector<bool>(C, false));
queue<Node> q; // 使用队列存储 Node 结构体
q.push(Node(startX, startY, 0));
visited[startX][startY] = true;
while (!q.empty()) {
Node current = q.front();
q.pop();
// 如果到达终点,返回跳跃次数
if (current.x == endX && current.y == endY) {
return current.jumps;
}// 尝试所有可能的跳跃方向
for (int i = 0; i < 8; ++i) {
int nx = current.x + dirs[i][0];
int ny = current.y + dirs[i][1];
// 检查是否越界或已访问或遇到障碍物
if (nx >= 0 && nx < R && ny >= 0 && ny < C && !visited[nx][ny] && grid[nx][ny] != '*') {
visited[nx][ny] = true;
q.push(Node(nx, ny, current.jumps + 1));
}
}
}// 如果无法到达终点,返回 -1
return -1;
}
int main() {
int C, R;
cin >> C >> R;
cin.ignore();
vector<string> grid(R);
int startX = -1, startY = -1, endX = -1, endY = -1;
for (int i = 0; i < R; ++i) {
getline(cin, grid[i]);
for (int j = 0; j < C; ++j) {
if (grid[i][j] == 'K') {
startX = i;
startY = j;
}
if (grid[i][j] == 'H') {
endX = i;
endY = j;
}
}
}// 如果起点或终点未找到,返回 -1
if (startX == -1 || startY == -1 || endX == -1 || endY == -1) {
cout << -1 << endl;
return 0;
}cout << findMinJumps(grid, startX, startY, endX, endY) << endl;
}
这里空空如也









有帮助,赞一个