前言
由于开了学术模式,也没看算法标签和难度,于是直接选择了BFS。
BFS思路
由于每走一步的路径长度都为 1 1 1 ,也就是说明当前路径长和访问序列的顺序是相同的,题目要求最短路,也就是最短路径是最早到达的路径。
这就正好符合了队列(queue)的FIFO(先进先出)的性质。
众所又周知,BFS以及和BFS相同思路的图论算法都和队列相关。比如01BFS使用的deque(双端队列),Dijkstra(著名单源最短路算法)的priority_queue(优先队列)。
所以,这道题的BFS思路就呼之欲出了(致DFS老祖,触雷致歉),BFS是 O ( n ) O(n) O(n) ,DFS是 O ( n 2 ) O(n^2) O(n2) ( n n n 为 h ∗ w h*w h∗w )。
BFS代码(AC,33ms,码风优良):
#include<bits/stdc++.h>
using namespace std;
const int N=505;
int h,w,dis[N][N];
string s[N];
int dx[]={
1,-1,0,0},dy[]={
0,0,1,-1};
int main(){
scanf("%d%d",&h,&w);
for(int i=0;i<h;i++)cin>>s[i];
memset(dis,-1,sizeof dis);
queue<pair<int,int>>q;
dis[0][0]=0;
q.push({
0,0});
while(q.size()){
auto [x,y]=q.front();q.pop();
for(int d=0;d

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



