zoukankan      html  css  js  c++  java
  • T84341 Jelly的难题1

    T84341 Jelly的难题1

    题解

    当窝发现窝的锅在读入这个矩阵的时候,窝。。窝。。窝。。

    果然,一遇到和字符串有关的题就开始吹空调

    好啦我们说说思路吧

    BFS队列实现

    拿出一个没有走过的点,扩展它可以达到的节点,那么它可以到达的节点的到达时间就等于它父节点到达时间+1

    代码

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int mod=19260817;
    int n,m,sx,sy,t;
    long long much;
    char ju[505][505];
    int vis[505][505];
    int dis[505][505];
    
    int dx[4]={-1,0,0,1};
    int dy[4]={0,-1,1,0};
    
    struct node
    {
        int x,y;
    };
    
    queue<node>q;
    
    int main()
    {
        scanf("%d%d
    ",&n,&m);
        memset(vis,-1,sizeof(vis));
        memset(dis,0,sizeof(dis));
        
        for(int i=1;i<=n;i++)
          for(int j=1;j<=m;j++)
          {
              cin>>ju[i][j];  //我的锅就在这里QWQ 
              
              if(ju[i][j]=='*')
              {
                  sx=i;sy=j;
                vis[i][j]=1;    
            }
            if(ju[i][j]=='o')
              vis[i][j]=1;
            if(ju[i][j]=='#')
              vis[i][j]=0;
          }
    
        node h;
        h.x =sx;h.y =sy;
        q.push(h);
      
        while(!q.empty())
        {
            
            node now=q.front();
            q.pop();
            t=max(t,dis[now.x][now.y]);
    
            for(int i=0;i<=3;i++)
            {
                int xx=now.x +dx[i];
                int yy=now.y +dy[i];
                if(vis[xx][yy]==0)
                {
                    dis[xx][yy]=dis[now.x ][now.y ]+1;
                    vis[xx][yy]=1;
                    node h;
                    h.x =xx;
                    h.y =yy;
                    q.push(h);
                }
            }
        }
    
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                if(dis[i][j]!=0)
                {
                    dis[i][j]=t-dis[i][j]+1;
                much=(much%mod+dis[i][j]%mod)%mod;
              }
                
            }
        
        printf("%d
    ",t);
        printf("%ld
    ",much);
    
        return 0;
    }
  • 相关阅读:
    最长有效括号
    C++ 环形缓存区的实现
    vector的原理与底层实现
    聚合分析与分组
    求两个数的最大公约数
    单例模式
    工厂方法模式
    责任链模式
    适配器模式
    策略模式
  • 原文地址:https://www.cnblogs.com/xiaoyezi-wink/p/11102846.html
Copyright © 2011-2022 走看看