公开征解!!!
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
有帮助,赞一个