zoj 2165

时间:2024-01-04 09:09:02

很简单的DFS搜索水题,递归理解深了很easy的!打了一遍就ac了

#include<stdio.h>
int atr[][];
int count=,n,m;
void DFS(int x,int y)
{
int i=;
for(i=;i<;i++)
{
if(i==)
{
if((y-)>=&&atr[y-][x]==)/*向上有点并且可以访问*/
{
count++;
atr[y-][x]=;
DFS(x,y-);
}
}
else if(i==)
{
if((x+)<m&&atr[y][x+]==)/*向上有点并且可以访问*/
{
count++;
atr[y][x+]=;
DFS(x+,y);
}
}
else if(i==)
{
if((y+)<n&&atr[y+][x]==)
{
count++;
atr[y+][x]=;
DFS(x,y+);
}
}
else if(i==)
{
if((x-)>=&&atr[y][x-]==)
{
count++;
atr[y][x-]=;
DFS(x-,y);
}
}
}
}
int main(int argc, char* argv[])
{
int i,j;
char c;
int sx,sy;
while(scanf("%d%d",&m,&n)!=EOF&&(m!=||n!=))
{
count=;
getchar();
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
scanf("%c",&c);
if(c=='.')
atr[i][j]=;
else if(c=='#')
atr[i][j]=-;
else if(c=='@')
{
atr[i][j]=;
sx=j;sy=i;
}
}
getchar();
}
DFS(sx,sy);
printf("%d\n",count);
}
return ;
}