zoukankan      html  css  js  c++  java
  • ※NC17872 CSL的校园卡

    二路\(BFS\)

    • 用二进制来表示地图的遍历状态
    • \(dist\)起到距离和判重两重作用,故\(dist\)数组也要加上二进制状态这一维
    const int N=5;
    struct Node
    {
        int x1,y1;
        int x2,y2;
        int s;
    };
    char g[N][N];
    int dist[N][N][N][N][1<<16];
    PII st;
    int n,m;
    
    inline bool check(int x,int y)
    {
        return x>=0 && x<n && y>=0 && y<m;
    }
    
    int bfs(int x,int y,int state)
    {
        memset(dist,-1,sizeof dist);
        queue<Node> q;
        q.push({x,y,x,y,state});
        dist[x][y][x][y][state]=0;
    
        while(q.size())
        {
            Node t=q.front();
            q.pop();
    
            int x1=t.x1,y1=t.y1,x2=t.x2,y2=t.y2,s=t.s;
            if(s == (1<<(n*m))-1) return dist[x1][y1][x2][y2][s];
    
            for(int i=0;i<4;i++)
            {
                int a=x1+dx[i],b=y1+dy[i];
                if(!check(a,b) || g[a][b] == 'X') continue;
    
                for(int j=0;j<4;j++)
                {
                    int c=x2+dx[j],d=y2+dy[j];
                    if(!check(c,d) || g[c][d] == 'X') continue;
                    int ns=s|(1<<(a*m+b))|(1<<(c*m+d));
                    if(dist[a][b][c][d][ns] == -1)
                    {
                        dist[a][b][c][d][ns]=dist[x1][y1][x2][y2][s]+1;
                        q.push({a,b,c,d,ns});
                    }
                }
            }
        }
        return -1;
    }
    
    int main()
    {
        cin>>n>>m;
    
        int state=0;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                scanf(" %c",&g[i][j]);
                if(g[i][j] == 'S') st={i,j},state|=(1<<(i*m+j));
                if(g[i][j] == 'X') state|=1<<(i*m+j);
            }
    
        int t=bfs(st.fi,st.se,state);
        cout<<t<<endl;
    
        //system("pause");
    }
    
  • 相关阅读:
    从零开始webpack4.x(五) js处理
    从零开始webpack4.x(四)样式loader
    从零开始webpack4.x(三)html插件
    从零开始webpack4.x(二)基础
    从零开始webpack4.x(一)介绍
    【转】react和vue渲染流程对比
    css3相关
    html5相关
    this指向
    整数划分问题(递归)
  • 原文地址:https://www.cnblogs.com/fxh0707/p/13753874.html
Copyright © 2011-2022 走看看