曂沅仴駦 发表于 2025-4-3 22:50:24

P9425 [蓝桥杯 2023 国 B] AB 路线(bfs)

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int dx={-1,0,0,1};
int dy={0,-1,1,0};
typedef pair<int,int> pii;
#define int long long

const int N=1010;

struct node{
        int x,y,d;
};
char g;
int n,m,k;
int st;

void solve()
{
        cin>>n>>m>>k;
        for(int i=1;i<=n;i++)
        {
                for(int j=1;j<=m;j++)cin>>g;
        }       
        st=1;
        queue<node>q;
        q.push({1,1,0});
        int flag=0;
        while(q.size())
        {
                auto t=q.front();
                q.pop();
               
                int x=t.x,y=t.y,d=t.d;
                if(x==n&&y==m)
                {
                        flag=1;
                        cout<<d<<endl;
                        return;
                }
                for(int i=0;i<4;i++)
                {
                        int a=dx+x,b=dy+y;
                        int dd=(d+1)%(k*2);
                        char ch;
                        if(dd>=0&&dd<k)ch='A';
                        else ch='B';
                        if(a>=1&&a<=n&&b>=1&&b<=m&&g==ch&&st[(d+1)%k]==0)
                        {
                                st[(d+1)%k]=1;
                                q.push({a,b,d+1});
                        }
                }
        }
        if(flag==0)cout<<"-1"<<endl;
}
signed main()
{
    int good_luck_to_you;
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    good_luck_to_you=1;
    //cin>>good_luck_to_you;
    while(good_luck_to_you--)
    {
       solve();
    }
    return 0;
}   本道题和平凡的bfs板子题不一样,它是一个格子可以走很多次,这里的话一个格子走的不能高出k次,所以我们在st数组又加了一维,表示这个格子不能走的高出k次,其他的和模板是一样的。 
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: P9425 [蓝桥杯 2023 国 B] AB 路线(bfs)