公开征解!!!
2025-02-28 21:07:14
发布于:浙江
【广度优先搜索(二)】被围绕的区域
题目描述
给你一个 m∗n 的矩阵,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充
提示
数据范围:
1<=m,n<=200
被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。
输入格式
第一个给出两个整数 M 和 N.
接着给出一个 m∗n 的矩阵
输出格式
输出改变后的矩阵
样例
输入:
4 4
XXXX
XOOX
XXOX
XOXX
输出:
XXXX
XXXX
XXXX
XOXX
我的代码:
#include<iostream>
#include<queue>
using namespace std;
int n,m,x,y,a;
char mp[210][210];
bool vis[210][210];
int dir[4][2]={0,1,1,0,0,-1,-1,0};
struct node{
    int sx,sy;
};
queue<node> q;
int main(){
    cin>>m>>n;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            cin>>mp[i][j];
        }
    }
    q.push({1,1});
    vis[1][1]=true;
    while(!q.empty()){
        node r=q.front();
        q.pop();
        for(int i=0;i<4;i++){
            int nx=r.sx+dir[i][0];
            int ny=r.sy+dir[i][1];
            if(nx>1&&nx<m&&ny>1&&ny<n&&!vis[nx][ny]&&mp[nx][ny]=='O'){
                q.push({nx,ny});
                vis[nx][ny]=true;
                mp[nx][ny]='X';
            }
        }
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            cout<<mp[i][j];
        }
        cout<<endl;
    }
    return 0;
}
建议方法:BFS
求解!!!解题者可互关
全部评论 4
顶
2025-02-28 来自 浙江
0顶
2025-02-28 来自 浙江
0顶
2025-02-28 来自 浙江
0顶
2025-02-28 来自 浙江
0












有帮助,赞一个