牛客練習賽31 A題
阿新 • • 發佈:2018-11-18
題目連結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; }