BFS OR DFS?
2024-10-20 17:01:39
发布于:浙江
5阅读
0回复
0点赞
DFS:
#include<bits/stdc++.h>//懒得优化了
using namespace std;
int n,m,f,cnt=0,nn=0,_,b[115][115];
char a[115][115];
void dfs(int x,int y){
if(b[x][y]||a[x][y]=='.'||x<=0||y<=0||x>n||y>m){
return ;
}else{
cnt++;
b[x][y]=1;
dfs(x-1,y);
dfs(x+1,y);
dfs(x,y-1);
dfs(x,y+1);
dfs(x-1,y-1);
dfs(x+1,y+1);
dfs(x+1,y-1);
dfs(x-1,y+1);
}
}int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){
cin>>a[i][j];
}for(int i=1;i<10;i++) for(int j=1;j<=n;j++) for(int k=1;k<=m;k++){
_=i;
cnt=0;
dfs(j,k);
if(cnt) ++nn;
}cout<<nn;
return 0;
}
BFS:
#include<bits/stdc++.h>
using namespace std;
char a[115][115];
int vis[115][115],b[115][115],cnt,jj[8][2]={1,0,0,1,-1,0,0,-1,1,1,-1,-1,1,-1,-1,1};
struct bfs{
int x,y;
};
int main(){//bfs
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]!='.') b[i][j]=1;
}
}for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(b[i][j]==1&&vis[i][j]==0){
cnt++;
queue<bfs> q;
bfs ii;
ii.x=i;
ii.y=j;
q.push(ii);
while(!q.empty()){
bfs t=q.front();
q.pop();
for(int i=0;i<8;i++){
int xx=t.x+jj[i][0];
int yy=t.y+jj[i][1];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&vis[xx][yy]==0&&a[xx][yy]=='W'){
vis[xx][yy]=1;
q.push({xx,yy});
}
}
}
}
}
}cout<<cnt;
return 0;
}
这里空空如也
有帮助,赞一个