题解 | 走迷宫

走迷宫

https://www.nowcoder.com/practice/e88b41dc6e764b2893bc4221777ffe64

//  #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432
//  最短路先想bfs
#include <iostream>
#include <vector>
#include <cmath>
#include <queue>
#include <array>
#define pre(i,j,k) for (int i = j; i < k; i++)
#define pi pair<int,int>
using namespace std;
array<int, 4> dx{0,0,1,-1}, dy{1,-1,0,0};
int main() {
  ios_base::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  vector<vector<char>> a(n, vector<char>(m));
  vector<vector<int>> len(n,vector<int>(m, -1));
  bool flag = 1;
  int qx, qy, fx, fy;
  cin >> qx >> qy >> fx >> fy;
  len[qx - 1][qy - 1] = 0;
  if (qx == fx && qy == fy){
    cout << 0;
    return 0;
  }
  pre(i,0,n)
  pre(j,0,m)
  cin >> a[i][j];
  queue<pi> q;
  q.push(pi(qx - 1, qy - 1));//----------起点入队
  while(!q.empty()){//---------如果队列不为空
    pi np = q.front();
    q.pop();
    pre(i,0,4){
      int nx = np.first + dx[i], ny = np.second + dy[i];
      if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;//-------各种检测
      if (a[nx][ny] == '*') continue;
      else if (len[nx][ny] != -1) continue;
      q.push(pi(nx, ny));
      len[nx][ny] = len[np.first][np.second] + 1;//---------跟新起点到这个点的最短路
      if (nx == fx - 1 && ny == fy - 1){//---------如果找到了终点
        flag = 0;
        break;
      }      
    }
  }
  if (flag) {//--------如果从起点能走到的点都遍历完了还没找到终点
    cout << -1;
  }
  return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-21 13:38
8月实习会变多吗现在还没找到实习该怎么办...回复的hr好少
码农索隆:3-4月就要开始找,基本上6月份就发offer,7月初已经开始暑期实习了。
点赞 评论 收藏
分享
白火同学:先说结论,准大三不是特别好找实习,boss沟通300+没有实习是很正常的情况。一是暑期实习时间太短了,二是在这么多准大四都找不到实习,从实习时间和掌握技术层面,企业会优先看他们。 再说简历,其实985本+准大三到这水平的简历也很优秀了,要说的话,项目经历可以再优化一下,可以基本围绕采取STAR原则,分为项目概述、技术架构、技术亮点、实现结果,再发给AI润色一下。 最后说操作,准大三的话,如果想找实习那就多投,不过现在也7月中旬了,时间上已经略晚了。如果7月底实在找不到,也可以多刷点算法,多学点技术,这实习也不至于一定得有,当然有更好。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-21 13:41
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务