1. 程式人生 > >牛客練習賽31 A題

牛客練習賽31 A題

題目連結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;
}