#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <climits>
using namespace std;
// 定义迷宫中的单元格
struct Cell {
int x, y, steps, value;
Cell(int x, int y, int steps, int value)
: x(x), y(y), steps(steps), value(value) {}
};
// 用于查询的结构体
struct QueryResult {
int steps;
int maxValue;
QueryResult(int steps, int maxValue) : steps(steps), maxValue(maxValue) {}
};
// 比较函数,用于排序
bool compareBySteps(const QueryResult& a, const QueryResult& b) {
return a.steps < b.steps;
}
// BFS计算最少步数
vector<vector<int>> bfs(const vector<vector<int>>& maze, int startX, int startY) {
int rows = maze.size();
int cols = maze[0].size();
vector<vector<int>> steps(rows, vector<int>(cols, -1));
queue<pair<int, int>> q;
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
steps[startX][startY] = 0;
q.push({startX, startY});
while (!q.empty()) {
int x = q.front().first;
int y = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < rows && ny >= 0 && ny < cols && maze[nx][ny] != 0 && steps[nx][ny] == -1) {
steps[nx][ny] = steps[x][y] + 1;
q.push({nx, ny});
}
}
}
return steps;
}
// 构建查询用的数据结构
vector<QueryResult> buildQueryStructure(const vector<vector<int>>& maze, const vector<vector<int>>& steps) {
int rows = maze.size();
int cols = maze[0].size();
vector<QueryResult> queryData;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (steps[i][j] != -1) {
queryData.push_back(QueryResult(steps[i][j], maze[i][j]));
}
}
}
sort(queryData.begin(), queryData.end(), compareBySteps);
return queryData;
}
// 处理单个查询
int queryMaxValue(const vector<QueryResult>& queryData, int maxSteps) {
int left = 0;
int right = queryData.size() - 1;
int result = INT_MIN;
while (left <= right) {
int mid = left + (right - left) / 2;
if (queryData[mid].steps <= maxSteps) {
result = max(result, queryData[mid].maxValue);
left = mid + 1;
} else {
right = mid - 1;
}
}
return result;
}
int main() {
// 示例迷宫
vector<vector<int>> maze = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int startX = 0;
int startY = 0;
// 计算最少步数
vector<vector<int>> steps = bfs(maze, startX, startY);
// 构建查询数据
vector<QueryResult> queryData = buildQueryStructure(maze, steps);
// 处理多个查询
vector<int> queries = {1, 2, 3};
for (int query : queries) {
int maxValue = queryMaxValue(queryData, query);
cout << "Max value within " << query << " steps: " << maxValue << endl;
}
return 0;
}
请化简一下上面代码码风,把类似变量名改为a,b,c,sum,ant
最新发布