周六900C++班级-20230207 深搜复习
7631: 无人机翱翔
2799: Counting Sheep
#include<bits/stdc++.h> using namespace std; char a[151][151]; int vis[151][151]; int nex[8][2] = {{0,1},{1,0},{0,-1},{-1,0}}; int n,m,ans; void dfs(int x,int y); int main(){ int t; cin>>t; while(t--){ cin>>n>>m; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; ans=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ if(a[i][j]=='#' && vis[i][j]==0){ vis[i][j]=1; ans++; dfs(i,j); } } cout<<ans<<endl; } return 0; } void dfs(int x,int y){ for(int i=0;i<4;i++){ int tx = x + nex[i][0]; int ty = y + nex[i][1]; if(tx<1||tx>n||ty<1||ty>m)continue; if(a[tx][ty]=='#' && vis[tx][ty]==0){ vis[tx][ty]=1; dfs(tx,ty); } } }
1334:石油矿床
#include<bits/stdc++.h> using namespace std; char a[101][101]; int t[12000]; bool vis[101][101]; int nex[8][2]={{0,1} , {1,0} , {0,-1} , {-1,0} , {-1,1} , {1,1} , {1,-1} , {-1,-1}}; int n,m,sum; void dfs(int x,int y){ for(int i=0;i<8;i++){ int tx=nex[i][0]+x; int ty=nex[i][1]+y; if(tx<1||tx>n||ty<1||ty>m)continue; if(a[tx][ty]=='@'&&vis[tx][ty]==0){ vis[tx][ty]=1; dfs(tx,ty); } } } int main(){ while(cin>>n>>m){ if(n==0&&m==0)break; memset(vis,0,sizeof(vis)); sum=0; memset(t,0,sizeof(t)); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ if(a[i][j]=='@'&&vis[i][j]==0){ vis[i][j]=1; sum++; dfs(i,j); } } cout<<sum<<endl; } return 0; }