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

打印 上一主题 下一主题

主题 1716|帖子 1716|积分 5148

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int mod=1e9+7;
  4. int dx[4]={-1,0,0,1};
  5. int dy[4]={0,-1,1,0};
  6. typedef pair<int,int> pii;
  7. #define int long long
  8. const int N=1010;
  9. struct node{
  10.         int x,y,d;
  11. };
  12. char g[N][N];
  13. int n,m,k;
  14. int st[N][N][20];
  15. void solve()
  16. {
  17.         cin>>n>>m>>k;
  18.         for(int i=1;i<=n;i++)
  19.         {
  20.                 for(int j=1;j<=m;j++)cin>>g[i][j];
  21.         }       
  22.         st[1][1][1]=1;
  23.         queue<node>q;
  24.         q.push({1,1,0});
  25.         int flag=0;
  26.         while(q.size())
  27.         {
  28.                 auto t=q.front();
  29.                 q.pop();
  30.                
  31.                 int x=t.x,y=t.y,d=t.d;
  32.                 if(x==n&&y==m)
  33.                 {
  34.                         flag=1;
  35.                         cout<<d<<endl;
  36.                         return;
  37.                 }
  38.                 for(int i=0;i<4;i++)
  39.                 {
  40.                         int a=dx[i]+x,b=dy[i]+y;
  41.                         int dd=(d+1)%(k*2);
  42.                         char ch;
  43.                         if(dd>=0&&dd<k)ch='A';
  44.                         else ch='B';
  45.                         if(a>=1&&a<=n&&b>=1&&b<=m&&g[a][b]==ch&&st[a][b][(d+1)%k]==0)
  46.                         {
  47.                                 st[a][b][(d+1)%k]=1;
  48.                                 q.push({a,b,d+1});
  49.                         }
  50.                 }
  51.         }
  52.         if(flag==0)cout<<"-1"<<endl;
  53. }
  54. signed main()
  55. {
  56.     int good_luck_to_you;
  57.     ios::sync_with_stdio(false);
  58.     cin.tie(0);
  59.     cout.tie(0);
  60.     good_luck_to_you=1;
  61.     //cin>>good_luck_to_you;
  62.     while(good_luck_to_you--)
  63.     {
  64.        solve();
  65.     }
  66.     return 0;
  67. }
复制代码
  本道题和平凡的bfs板子题不一样,它是一个格子可以走很多次,这里的话一个格子走的不能高出k次,所以我们在st数组又加了一维,表示这个格子不能走的高出k次,其他的和模板是一样的。 
   


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曂沅仴駦

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表