对于迷宫型的题目
如果能在四周围上围墙
将能节省很多代码
附上自己的代码:
#include <iostream>
using namespace std;
int map[30][30];
bool used[30][30];
int w,h,a,b;
int k;
void dfs(int x,int y)
{
if(used[x][y]||!map[x][y])
return ;
used[x][y]=1;
k++;
dfs(x-1,y); //这里本来应该有四个判断语句的。但是当在四周围上围墙后,简洁了很多。
dfs(x,y+1);
dfs(x+1,y);
dfs(x,y-1);
}
int main()
{
while(cin>>w>>h&&w&&h)
{
memset(map,0,sizeof(map));
memset(used,0,sizeof(used));
for(int i=1;i<=h;i++)
for(int j=1;j<=w;j++)
{
char ch;
cin>>ch;
if(ch=='.')
map[i][j]=1;
else if(ch=='@')
a=i,b=j,map[i][j]=1;
}
k=0;
dfs(a,b);
cout<<k<<"\n";
}
return 0;
}