题解
【基础】数池塘(八方向)
3 条题解
-
0
#include <bits/stdc++.h> using namespace std; int n, m; char a[105][105]; int dx[8] = {1, -1, 0, 0, 1, 1, -1, -1}; int dy[8] = {0, 0, 1, -1, 1, -1, 1, -1}; void dfs(int x, int y) { a[x][y] = '.'; for (int i = 0; i < 8; i++) { int nx = x + dx[i], ny = y + dy[i]; if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && a[nx][ny] == 'W') dfs(nx, ny); } } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> a[i][j]; int ans = 0; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (a[i][j] == 'W') { ans++; dfs(i, j); } cout << ans; } -
0
#include <bits/stdc++.h> using namespace std; int n, m; char a[105][105]; int dx[8] = {1, -1, 0, 0, 1, 1, -1, -1}; int dy[8] = {0, 0, 1, -1, 1, -1, 1, -1}; void dfs(int x, int y) { a[x][y] = '.'; for (int i = 0; i < 8; i++) { int nx = x + dx[i], ny = y + dy[i]; if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && a[nx][ny] == 'W') dfs(nx, ny); } } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) cin >> a[i][j]; int ans = 0; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (a[i][j] == 'W') { ans++; dfs(i, j); } cout << ans; } -
0
#include<bits/stdc++.h> using namespace std; char a[110][110]; int n,m,s=0; //下右上左 左上 右上 右下 左下 int fx[10]={0,1,0,-1,0,1,1,-1,-1}; int fy[10]={0,0,1,0,-1,-1,1,1,-1}; void f(int x,int y){ a[x][y]='.';//吸干水分 for(int i=1;i<=8;i++){//遍历八个方向的情况 int tx=fx[i]+x; int ty=fy[i]+y; if(a[tx][ty]=='W'&&tx>=1&&tx<=n&&ty>=1&&ty<=m){//如果有水洼 f(tx,ty);//通过递归吸干 } } } 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<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]=='W'){//判断是水洼 s++;//池塘数目+1 f(i,j);//递归相邻的水洼 } } } cout<<s; return 0; }
- 1