2019河北省大学生程序设计竞赛 L.smart robot(bfs)

Posted live4m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019河北省大学生程序设计竞赛 L.smart robot(bfs)相关的知识,希望对你有一定的参考价值。

题意:

解法:

从 1 开 始 枚 举 a n s , 数 位 拆 分 a n s , 然 后 b f s 计 算 是 否 能 组 成 a n s 即 可 , 对 于 每 个 枚 举 a n s , 设 数 位 长 度 为 l e n , 那 么 单 次 b f s 的 复 杂 度 为 4 l e n − 1 . 复 杂 度 不 太 会 算 , O ( a c ) . 从1开始枚举ans,数位拆分ans,然后bfs计算是否能组成ans即可,\\\\ 对于每个枚举ans,设数位长度为len,那么单次bfs的复杂度为4^len-1.\\\\ 复杂度不太会算,O(ac). 1ans,ans,bfsans,ans,len,bfs4len1.,O(ac).

code:

#include <bits/stdc++.h>
using namespace std;
const int maxm=2e5+5;
int dx[]=0,0,1,-1;
int dy[]=1,-1,0,0;
int mark[55][55][55];
int a[55][55];
int digit[55];
int n;
struct Node
    int i,j,k;
;
bool bfs(int p)
    int len=0;
    while(p)
        digit[++len]=p%10;
        p/=10;
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=len;k++)
                mark[i][j][k]=0;
            
        
    
    queue<Node>q;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(a[i][j]==digit[len])
                if(len==1)return 1;
                mark[i][j][len]=1;
                q.push(i,j,len);
            
        
    
    while(q.size())
        Node t=q.front();q.pop();
        int x=t.i,y=t.j,z=t.k;
        for(int k=0;k<4;k++)
            int xx=x+dx[k];
            int yy=y+dy[k];
            if(xx<=0||xx>n||yy<=0||yy>n)continue;
            if(mark[xx][yy][z-1])continue;
            if(a[xx][yy]==digit[z-1])
                if(z-1==1)return 1;
                mark[xx][yy][z-1]=1;
                q.push(xx,yy,z-1);
            
        
    
    return 0;

void solve()
    cin>>n;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
        
    
    for(int k=1;;k++)
        if(!bfs(k))
            cout<<k<<endl;
            return ;
        
    

signed main()
    ios::sync_with_stdio(0);
    solve();
    return 0;


以上是关于2019河北省大学生程序设计竞赛 L.smart robot(bfs)的主要内容,如果未能解决你的问题,请参考以下文章

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem L. 跑图-题解

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem H. 神殿-题解

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem G. 520-题解

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem K. Bitmap-题解

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem C. icebound 的账单-题解

第 2 届河北省大学生程序设计竞赛(河北省赛)-Problem J. icebound 的商店-题解