dfs深度优先搜索

https://www.luogu.com.cn/problem/P8662

`

include<bits/stdc++.h>

using namespace std;
int n;
const int N=1010;
char a[N][N];
int sum,ans,cnt;
int d[4][2]={0,1,0,-1,1,0,-1,0};
bool f1;
void dfs(int x,int y) {
if (f1 == false) {
cnt = 0;
for (int i = 0; i < 4; i++) {
int x1 = x + d[i][0];
int y1 = y + d[i][1];
if (a[x1][y1] != '.') {
cnt++;
}
}
if (cnt == 4) {
ans++;
f1 = true;
}
}
a[x][y] = '*';
for (int i = 0; i < 4; i++) {
int x2 = x + d[i][0];
int y2 = y + d[i][1];
if (a[x2][y2] == '#' && x2 >= 0 && x2 < n && y2 >= 0 && y2 < n) {
dfs(x2, y2);
}
}
}
int main(){
cin >> n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin >> a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++) {
if (a[i][j] == '#') {
sum++;
f1 = false;
dfs(i, j);
}
}
}
cout << sum-ans << endl;
return 0;
}

`

posted @ 2024-01-29 17:20  CXfang10  阅读(19)  评论(0)    收藏  举报