牛客对应题目链接:kotori和迷宫 (nowcoder.com)
一、分析题目
迷宫问题的扩展。
二、代码
#include <iostream>
#include <cstring>
#include <queue>using namespace std;const int N = 35;
int x1, y1; // 标记起点位置
int n, m;
char arr[N][N];
int dist[N][N];
queue<pair<int, int>> q;int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};void bfs()
{memset(dist, -1, sizeof dist);dist[x1][y1] = 0;q.push({x1, y1});while(q.size()){auto [x2, y2] = q.front();q.pop();for(int i = 0; i < 4; i++){int a = x2 + dx[i], b = y2 + dy[i];if(a >= 1 && a <= n && b >= 1 && b <= m && dist[a][b] == -1 && arr[a][b] != '*'){dist[a][b] = dist[x2][y2] + 1;if(arr[a][b] != 'e'){q.push({a, b});}}}}
}int main()
{cin >> n >> m;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){cin >> arr[i][j];if(arr[i][j] == 'k'){x1 = i, y1 = j;}}}bfs();int count = 0, ret = 1e9;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){if(arr[i][j] == 'e' && dist[i][j] != -1){count++;ret = min(ret, dist[i][j]);}}}if(count == 0) cout << -1 << endl;else cout << count << " " << ret << endl;return 0;
}
三、反思与改进
没有设置好对不同字符的处理条件。