这道题是一道地道的搜索题,既可以用深搜,也可以用广搜,能力有限,小弟就在这只用深搜写,注意行和列就是。。。
#include<iostream>
#include<cstring>#include<cstdlib>
#include<queue>
#include<cstdio>
#include<algorithm>
using namespace std;
char map[21][21];
int visited[21][21],num,W,H;
int next[4][2] = {
{1, 0},
{-1, 0},
{0, 1},
{0, -1},
};
void dfs(int x,int y)
{
num++;
visited[x][y]=1;
for(int i=0;i<4;i++)
{
int mx=x+next[i][0];
int my=y+next[i][1];
if(mx>=0&&my>=0&&map[mx][my]=='.'&&!visited[mx][my]&&mx<H&&my<W)
{
dfs(mx,my);
}
}
}
int main()
{
int star_x,star_y;
while(cin>>W>>H)
{
if (W== 0 && H == 0) break;
for(int i=0;i<H;i++)
for(int j=0;j<W;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{
star_x=i;
star_y=j;
}
}
memset(visited,0,sizeof(visited));
num=0;
dfs(star_x,star_y);
cout<<num<<endl;
}
return 0;
}