DENGZIAO @ 2024-10-22 15:45:55
#include<bits/stdc++.h>
using namespace std;
int a[40][40];
bool vis[40][40];
int tx[4]={0,0,1,-1};
int ty[4]={1,-1,0,0};
int n,m;
struct node{
int x;
int y;
};
queue<node>q;
void bfs(int x,int y){
int fx,fy;
vis[x][y]=1;
q.push((node){x,y});
while(!q.empty()){
vis[q.front().x][q.front().y]=1;
for(int i=0;i<4;i++){
fx=q.front().x+tx[i],fy=q.front().y+ty[i];
if(!vis[fx][fy]&&fx>=0&&fx<=n&&fy>=0&&fy<=n&&a[fx][fy]!=1){
q.push((node){fx,fy});
}
}
q.pop();
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(!vis[i][j]) a[i][j]=2;
cout<<a[i][j]<<" ";
}
cout<<endl;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]) vis[i][j]=true;
}
}
bfs(0,0);
return 0;
}
by tengyuxuan @ 2024-11-09 21:56:33
using namespace std; int n; int b[35][35],a[35][35]; void dfs(int x,int y){ if(x<0||y<0||y>=n+2||x>=n+2||a[x][y]!=0)return; a[x][y]=1; dfs(x+1,y); dfs(x-1,y); dfs(x,y-1); dfs(x,y+1); } int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>b[i][j]; if(b[i][j]==1)a[i][j]=3; } } dfs(0,0); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(a[i][j]==0){ cout<<2<<' '; }else{ cout<<b[i][j]<<' '; } } cout<<endl; } return 0; }```cpp
```cpp
#include <bits/stdc++.h>
using namespace std;
int n;
int b[35][35],a[35][35];
void dfs(int x,int y){
if(x<0||y<0||y>=n+2||x>=n+2||a[x][y]!=0)return;
a[x][y]=1;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y-1);
dfs(x,y+1);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>b[i][j];
if(b[i][j]==1)a[i][j]=3;
}
}
dfs(0,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==0){
cout<<2<<' ';
}else{
cout<<b[i][j]<<' ';
}
}
cout<<endl;
}
return 0;
}
by tengyuxuan @ 2024-11-09 21:58:51
#include <bits/stdc++.h>
using namespace std;
int mp[40][40];
bool vis[40][40];//标识哪些点被访问过,如果被访问过则标识为1,否则为0
int n;
int fx[5]={0,0,1,0,-1};//行方向数组
int fy[5]={0,1,0,-1,0};//列方向数组
struct node{
int x;//行值
int y;//列值
};
queue<node> q;//定义队列q
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>mp[i][j];
}
}
//开始广搜:从(0,0)开始:
node sp;//定义初始队首元素
sp.x=0;
sp.y=0;
q.push(sp);//将队首元素sp压入队列q中
//开始广搜(bfs)
while(!q.empty()){
//每次都以队首元素为基准点进行四个方向探索
node qf=q.front();//取出队首元素
int bx,by;
bx=qf.x;
by=qf.y;
for(int i=1;i<=4;i++){
int nx,ny;
nx=bx+fx[i];
ny=by+fy[i];
if(nx>=0&&nx<=n+1&&ny>=0&&ny<=n+1&&mp[nx][ny]==0&&!vis[nx][ny]){
vis[nx][ny]=1;
node np;//定义新点
np.x=nx;
np.y=ny;
q.push(np);//将新点压入队列
}
}
q.pop();//将队首元素弹出
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
//没有被访问过,而且是0的点,改为2 :
if(vis[i][j]==0&&mp[i][j]==0){
cout<<2<<' ';
//其余的点输出原值即可:
}else{
cout<<mp[i][j]<<' ';
}
}
}
return 0;
}