前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AcWing 175. 电路维修(双端队列广搜)

AcWing 175. 电路维修(双端队列广搜)

作者头像
glm233
发布2021-03-23 12:00:48
3070
发布2021-03-23 12:00:48
举报
文章被收录于专栏:glm的全栈学习之路

思路:

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
#define x first
#define y second
const int N=510;
int t,r,c;
int dist[N][N],st[N][N];
char g[N][N];
int bfs(){
    deque<pii>q;
    memset(dist,0x3f,sizeof dist);
    memset(st,0,sizeof st);
    dist[0][0]=0;
    char tep[10]="\\//\\";
    int dx[]={-1,-1,1,1},dy[]={-1,1,-1,1};
    int idx[]={-1,-1,0,0},idy[]={-1,0,-1,0};
    q.push_back({0,0});
    while(q.size()){
        pii now=q.front();
        q.pop_front();
        int x=now.x,y=now.y;
        //cout<<x<<" "<<y<<endl;
        if(st[x][y])continue;
        st[x][y]=1;
        for(int i=0;i<4;i++){
            int nx=x+dx[i],ny=y+dy[i];
            if(nx<0||nx>r||ny<0||ny>c)continue;
            int testx=x+idx[i],testy=y+idy[i];
            int t=dist[x][y]+(g[testx][testy]!=tep[i]);
            if(t<dist[nx][ny]){
                dist[nx][ny]=t;
                if(g[testx][testy]!=tep[i]){
                    q.push_back({nx,ny});
                }
                else q.push_front({nx,ny});
            }
        }
    }
    return dist[r][c];
}
int main(){
    cin>>t;
    while(t--){
        cin>>r>>c;
        for(int i=0;i<r;i++){
            cin>>g[i];
        }
        int t=bfs();
        if(t==0x3f3f3f3f)puts("NO SOLUTION");
        else cout<<t<<endl;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档