题解
2024-07-25 16:02:17
发布于:广东
7阅读
0回复
0点赞
DFS
#include<bits/stdc++.h>
using namespace std;
int n;
int a[35][35];
int dirx[4]={-1,1,0,0};
int diry[4]={0,0,1,-1};
void dfs(int x,int y){
a[x][y]=-1;
for(int u=0;u<4;u++){
int nx=x+dirx[u];
int ny=y+diry[u];
if(nx>=0&&ny>=0&&nx<=n+1&&ny<=n+1&&a[nx][ny]==0){
dfs(nx,ny);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
dfs(0,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==-1)cout<<0<<" ";
else if(a[i][j]==0)cout<<2<<" ";
else cout<<1<<" ";
}
cout<<endl;
}
return 0;
}
BFS
#include<bits/stdc++.h>
using namespace std;
int a[35][35];
bool vis[35][35];
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int n;
struct node{
int x,y;
};
void BFS(int x,int y){
queue<node>q;
q.push({x,y});
while(!q.empty()){
node now=q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=now.x+dx[i];
int ny=now.y+dy[i];
if(nx>=0&&ny>=0&&nx<=n+1&&ny<=n+1&&!vis[nx][ny]&&a[nx][ny]==0){
vis[nx][ny]=1;
q.push({nx,ny});
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
BFS(0,0);
for (int i=1;i<=n;i++) {
for (int j=1;j<=n;j++) {
if (a[i][j] == 0 &&!vis[i][j]) {
cout<<2<<" ";
}
else cout<<a[i][j]<<" ";
}
cout<<'\n';
}
return 0;
}
这里空空如也
有帮助,赞一个