很基础的一道题,和油田问题有很多相似之处。
思路见代码
1.DFS深度搜索:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=1000;
char map[maxn][maxn];
int vis[maxn][maxn];
int sx,sy;
int n,m;
void dfs(int x,int y) //
{
if(map[x][y]=='#'||vis[x][y]==1) return;
if(x<0||x>n-1||y<0||y>m-1) return;
vis[x][y]=1; //只有走过这块,才将vis值置1
dfs(x+1,y); dfs(x-1,y);
dfs(x,y-1); dfs(x,y+1);
}
int main(void)
{
int i,j,k;
while(cin>>m>>n)
{
int cnt=0;
memset(vis,0,sizeof(vis));
if(n==0&&m==0) break;
for(i=0;i<n;i++)
{
cin>>map[i];
for(j=0;j<m;j++)
if(map[i][j]=='@')
{
sx=i;sy=j;
}
}
dfs(sx,sy);
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cnt+=vis[i][j]; //走过为1,未走为0,进行加和计算即可
cout<<cnt<<endl;
}
}