语言:C++98
by _X_M_ @ 2024-02-01 12:00:13
样例全过,全WA,0分,[评测记录](https://luogu.com.cn/record/145553758)
by _X_M_ @ 2024-02-01 12:03:04
看了半天,没看出问题
by _X_M_ @ 2024-02-01 12:07:36
```
4 4
****
*00*
*00*
****
```
你觉得这个数据的答案是是多少?
by yuyc @ 2024-02-01 12:24:55
@[_X_M_](/user/988099) 你觉得这题放在搜索会有这种解法吗?下面是我的代码,用的是`dfs`,思路是将会被水淹没的地方标成2,然后统计没有被淹没的地方的个数。
```cpp
#include <iostream>
using namespace std;
#define FOR(i,j,n,k) for(int i=(j);i<=(n);i+=k)
#define ROR(i,j,n,k) for(int i=(j);i>=(n);i-=k)
const int upint=1e6+10;
const double downdouble=1e-6;
int n,m,cnt;
int dx[5]={0,1,0,-1,0},dy[5]={0,0,1,0,-1};
char map[510][510];
void dfs(int x,int y){
map[x][y]='1';
for(int i=1;i<=4;i++){
int tx=x+dx[i],ty=y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&map[tx][ty]=='0') dfs(tx,ty);
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>map[i][j];
for(int i=1;i<=n;i++){
if(map[i][1]=='0') dfs(i,1);
if(map[i][m]=='0') dfs(i,m);
}
for(int i=1;i<=m;i++){
if(map[1][i]=='0') dfs(1,i);
if(map[n][i]=='0') dfs(n,i);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(map[i][j]=='0') cnt++;
printf("%d",cnt);
return 0;
}
```
by danlao @ 2024-02-01 12:35:39
@[yuyc](/user/239562) @[yaodiguoan](/user/1023793) 谢谢,已关,结帖
by _X_M_ @ 2024-02-02 12:19:17
@[_X_M_](/user/988099) ?
by danlao @ 2024-02-02 13:46:29
@[yaodiguoan](/user/1023793) 问题结束了就不再继续无意义的关注了
by _X_M_ @ 2024-02-04 10:11:31