题解
2024-05-19 11:29:04
发布于:广东
31阅读
0回复
0点赞
刚考完,拿来测一下
输了,当时没有return-1
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
struct node{
int x, y, step;
};
char mp[505][505];
bool vis[505][505];
int dir[4][2] = {-1, 0, 0, -1, 0, 1, 1, 0};
vector <node> v;//记录传送门
int n, m, x1, y1;
bool check(int x, int y){
if(x < 1 || x > n || y < 1 || y > m) return 0;
if(mp[x][y] == '#' || vis[x][y]) return 0;
return 1;
}
int bfs(){
queue <node> q;
q.push({1, 1, 1});
while(!q.empty()){
node head = q.front();
q.pop();
if(head.x == n && head.y == m) return head.step;//到右下角就停
for(int i = 0; i < 4; i++){
int xx = head.x + dir[i][0], yy = head.y + dir[i][1];
if(check(xx, yy)){
if(mp[xx][yy] == '$'){//到传送门了
for(int j = 0; j < v.size(); j++){
if(!vis[v[j].x][v[j].y]) vis[v[j].x][v[j].y] = 1, q.push({v[j].x, v[j].y, head.step + 1});
}
}else{
vis[xx][yy] = 1;
q.push({xx, yy, head.step + 1});//正常走
}
}
}
}return -1;
}
int main(){
cin >> n >> m;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
cin >> mp[i][j];
if(mp[i][j] == '$') v.push_back({i, j, 0});
}
}cout << bfs();
return 0;
}
全部评论 2
太强了,我也会了,要不我们先讲正常的,再讲一个这个?
6天前 来自 广东
0666也不是不行
6天前 来自 广东
0
hhh
2024-08-11 来自 湖南
0
有帮助,赞一个