算法
dfs
思路
1.找到字符’@’
2.dfs,向四周扩散,直到遇到’#’,并记得在遍历过后用一个数组来标记
c++代码
#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
ll n,m;
bool visted[1010][1010];//标记是否遍历过
char a[1010][1010];
ll ans;
void dfs(ll x,ll y)
{
if(x<1||x>n|y<1||y>m||visted[x][y]==true)return ;//停止便历条件:超出边界,之前已经遍历过或不符合要求
if(a[x][y]=='#')return ;
visted[x][y]=true;
ans++;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);//向四周扩散
}
int main()
{
cin>>m>>n;
while(n!=0&&m!=0)
{
ll x,y;
ans=0;
for(long long i=1;i<=n;i++)
{
for(long long j=1;j<=m;j++)
{
cin>>a[i][j];
visted[i][j]=false;
if(a[i][j]=='@')x=i,y=j;
}
}
dfs(x,y);
cout<<ans<<"\n";
cin>>m>>n;
}
return 0;
}