版权声明:转载注明出处!!! https://blog.csdn.net/xhpaqh/article/details/84198046
题目链接https://ac.nowcoder.com/acm/contest/218/A
先记ans=n*m即个数,然后进行遍历,对走过的进行重置,然后ans- -,最后剩下的就是符合条件的。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
string S[1000010];
int m,n;
int ans=0;
void solve(int x,int y){
if(x==0||x>n||y==-1||y>=m)return;
if(S[x][y]=='#'||S[x][y]=='*')return;
ans--;
S[x][y]='*';
solve(x+1,y);//向右
solve(x,y+1);//向上
solve(x,y-1);//向下
solve(x-1,y);//向左
}
int main(){
scanf("%d%d",&n,&m);
ans=m*n;
for(int i=1;i<=n;i++)
cin>>S[i];
for(int i=1;i<=n;i++)
solve(i,0);//第一列
for(int i=1;i<=n;i++)
solve(i,m-1);//第m列
for(int i=1;i<=m;i++)
solve(1,i-1);//第一行
for(int i=1;i<=m;i++)
solve(n,i-1);//第n行
printf("%d\n",ans);
return 0;
}