AcWing每日一题--献给阿尔吉侬的花束

https://www.acwing.com/problem/content/1103/

搜索题,数据范围为1<=n,m<=200。

所以dfs是必然超时的,时间复杂度为(200*200)!

复制代码
 1 void dfs(PII now,PII e,int step){
 2     if(now==e){
 3         res=min(res,step);
 4         return ;
 5     }
 6     for(int i=0;i<4;i++){
 7         int x=now.x+u[i],y=now.y+v[i];
 8         if(x>=0&&x<n&&y>=0&&y<m&&g[x][y]!='#'){
 9             g[x][y]='#';
10             dfs({x,y},e,step+1);
11             g[x][y]='.';
12         }
13     }
14 }
复制代码

所以得用bfs,时间复杂度为200*200。

复制代码
 1 #include<iostream>
 2 #include<climits>
 3 #include<queue>
 4 #include<cstring>
 5 using namespace std;
 6 typedef pair<int,int> PII;
 7 const int N=210;
 8 char g[N][N];
 9 int n,m;
10 int u[]={-1,0,1,0};
11 int v[]={0,1,0,-1};
12 int dist[N][N];
13 int bfs(PII s,PII e){
14     memset(dist,-1,sizeof(dist));
15     queue<PII> q;
16     q.push(s);
17     dist[s.first][s.second]=0;
18     while(q.size()){
19         PII t=q.front();
20         q.pop();
21         for(int j=0;j<4;j++){
22             int x=t.first+u[j],y=t.second+v[j];
23             if(x<0||x>=n||y<0||y>=m||g[x][y]=='#')
24                 continue;
25             if(dist[x][y]!=-1)
26                 continue;
27             dist[x][y]=dist[t.first][t.second]+1;
28             if(make_pair(x,y)==e){
29                 return dist[x][y];
30             }
31             q.push({x,y});
32         }
33     }
34     return -1;
35 }
36 int main(void){
37     int t;
38     cin>>t;
39     while(t--){
40        cin>>n>>m;
41        PII start,end;
42        for(int i=0;i<n;i++){
43            for(int j=0;j<m;j++){
44                cin>>g[i][j];
45                if(g[i][j]=='S') start={i,j},g[i][j]='#';
46                if(g[i][j]=='E') end={i,j};
47            }
48        }
49        int res=bfs(start,end);
50        if(res!=-1) cout<<res<<endl;
51        else cout<<"oop!"<<endl;
52     }
53     return 0;
54 }
复制代码

 

posted on   greenofyu  阅读(102)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2020-02-03 P3368树状数组2(树状数组//改段求点)
2020-02-03 P3373 树状数组1(树状数组//改点求段)
2020-02-03 树状数组
2020-02-03 P1197 星球大战(并查集+链式向前星)
点击右上角即可分享
微信分享提示