DFS经典题目。
DFS是会无限搜索下去的,但它求得的解不是最优的,这点与BFS区别。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char grid[25][25];
int W,H;
int ans;
bool vis[25][25];
bool Judge(int i,int j)
{
if(0<=i&&i<W&&0<=j&&j<H) return true;
else return false;
}
void dfs(int i,int j)
{
if(!Judge(i,j)) return;
if(vis[i][j]) return;
if(grid[i][j]=='#') return;
vis[i][j]=true;
dfs(i-1,j);
dfs(i,j-1);
dfs(i,j+1);
dfs(i+1,j);
ans++;
}
int main()
{
while(scanf("%d%d",&H,&W)&&!(!W&&!H))
{
getchar();
memset(grid,0,sizeof(grid));
memset(vis,0,sizeof(vis));
int sx,sy;
bool ok=false;
for(int i=0; i<W; ++i)
{
scanf("%s",grid[i]);
if(!ok)
for(int j=0; grid[i][j]; ++j)
if(grid[i][j]=='@')
{
sx=i;
sy=j;
ok=true;
}
}
ans=0;
dfs(sx,sy);
printf("%d\n",ans);
}
return 0;
}