1.存的图用完之后要初始化。
2.还是有回溯的,只不过没有加还原标记而已。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 25
char map_[MAX][MAX];
int col,row;
int num;
int dir[4][2]={
{
-1,0},{
1,0},{
0,-1},{
0,1}};
int isborder(int l,int r)//--->判断是否越界
{
if(l>=0&&l<=row&&r<=col&&r>=0)
{
return 1;
}
else
return 0;
}
int dfs(int l,int r)
{
int ll,rr;
for(int i=0;i<4;i++)
{
ll=l+dir[i][0];
rr=r+dir[i][1];
if(isborder(ll,rr)&&map_[ll][rr]=='.')
{
map_[ll][rr]='#';
num++;
dfs(ll,rr);
}
}
return 0;
}
int main()
{
while(scanf("%d%d",&col,&row)==2)
{
num=0;
//flag=0;
if(col==0&&row==0)
{
break;
}
for(int i=0;i<row;i++)
{
scanf("%s",&map_[i]);
}
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(map_[i][j]=='@')
{
num++;
dfs(i,j);
}
}
}
printf("%d\n",num);
memset(map_,'\0',sizeof(map_));
}
return 0;
}