初级农民-请到新手上路获取积分
- 积分
- 7
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-9-7
- 最后登录
- 1970-1-1
|
Onsite 1, 一遍BFS- struct point {
- int x, y;
- point(int a, int b): x(a), y(b) {}
- };
- vector<vector<int>> bfs(vector<vector<char>> &map)
- {
- size_t row = map.size();
- size_t col = map[0].size();
- vector<vector<int>> result;
- for (size_t i = 0; i < row; i++)
- result.push_back(vector<int>(col));
- queue<point> q;
- for (size_t i = 0; i < row; i++) {
- for (size_t j = 0; j < col; j++) {
- if (map[i][j] == 'G') {
- point p(i, j);
- q.push(p);
- result[i][j] = -2;
- }
- }
- }
- //up, down, left, right
- vector<vector<int>> directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
- int d = 1;
- while (!q.empty()) {
- size_t size = q.size();
- for (size_t i = 0; i < size; i++) {
- point p = q.front(); q.pop();
- for (auto dir : directions) {
- int x = p.x + dir[0];
- int y = p.y + dir[1];
- if (x >= 0 && x < row && y >= 0 && y < col) {
- if (map[x][y] == '.') {
- if (result[x][y] == 0) {
- result[x][y] = d;
- q.push(point(x, y));
- }
- } else if (map[x][y] == 'L')
- result[x][y] = -1;
- }
- }
- }
- d++;
- }
- return result;
- }
- int main()
- {
- vector<vector<char>> map = {
- {'G', 'L', 'L', '.'},
- {'.', '.', 'G', '.'},
- {'L', '.', 'L', '.'},
- {'.', 'G', 'L', 'G'},
- {'.', '.', '.', '.'},
- };
- vector<vector<int>> result = bfs(map);
- for (size_t i = 0; i < result.size(); i++) {
- for (size_t j = 0; j < result[0].size(); j++) {
- cout << result[i][j] << " ";
- }
- cout << endl;
- }
- return 0;
- }
复制代码 |
|