求助
查看原帖
求助
566513
WiccldCute楼主2022/1/24 20:23
#include<iostream>
#include<queue>
#include<cmath>
#define int long long
using namespace std;
int n,m,k;
char mp[888][888];
int vis[888][888];
int si=0,sj=0;
const int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
struct s{
    int a,b,step;
};
int ans=0x7f7f7f7f7f7f7f7f;
void bfs(){
    queue<s> q;
    q.push({si,sj,0});
    vis[si][sj]=1;
    while(!q.empty()){
        s t=q.front();
        q.pop();
        if(t.step>k)continue;
        ans=min(t.a,min(n-t.a-1,min(t.b,m-t.b-1)));
        for(int i=0;i<4;i++){
            int nx=t.a+dx[i],ny=t.b+dy[i];
            if(nx<0||nx>=n||ny<0||ny>=m||vis[nx][ny]||mp[nx][ny]=='#')continue;
            vis[nx][ny]=1;
            q.push({nx,ny,t.step+1});
        }
    }
}

signed main(){
    cin>>n>>m>>k;

    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>mp[i][j];
            if(mp[i][j]=='S')si=i,sj=j;
        }
    }
    bfs();
    cout<<ceil(ans*1.0/(k*1.0))+1<<endl;
}

11WA 35ACkl

2022/1/24 20:23
加载中...