12203 Darker and Darker

本文介绍了一种在二维网格中将所有白色方块通过扩散方式变为黑色的算法。使用广度优先搜索(BFS)策略,从初始的黑色方块开始,每次操作可以将相邻的白色方块变为黑色。算法目标是最小化操作次数,实现整个网格的黑色化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每次可以把黑色方块的上下左右四个方向的白色方块变成黑色,问最少需要多少次才能把所有方块变成黑色

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
const int dx[]={1,-1,0,0};
const int dy[]={0,0,1,-1};

int n,m,ans;
char s[1111][1111];
struct node { int x,y,step; };
queue<node> que;
void bfs() {
    while (!que.empty()) {
        node now=que.front(); que.pop();
        ans=max(ans,now.step);
        for (int i=0;i<4;i++) {
            node nex=node{now.x+dx[i],now.y+dy[i],now.step+1};
            if (s[ nex.x ][ nex.y ]=='.') {
                s[ nex.x ][ nex.y ]='#';
                que.push(nex);
            }
        }
    }
}
int main () {
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++) {
            scanf(" %c",&s[i][j]);
            if (s[i][j]=='#')
                que.push(node{i,j,0});
        }
    bfs();
    printf("%d\n",ans);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值