题目链接:https://vjudge.net/contest/339651#problem/A
典型的DFS题,在这里记录一下自己的习惯,复习起来会好些。
1.典型要遍历所有满足条件的点
2.输入的m,n的含义一定要清楚,谁是列,谁是行(谁是shu,谁是heng)
3.在习惯上一般有一个biaoji函数,用作标记走过的点(vis)
4.在DFS上一般写成竖和横的形式,所以在输入时就要按照这个形式进行输入(即两者要统一)
5.初始化一定要有
#include <cstdio>
#include <iostream>
using namespace std;
int xx[10]={0,1,-1,0,0};
int yy[10]={0,0,0,1,-1};
int sum;
char a[25][25];
int biaoji[25][25];
int m,n;
void DFS (int y,int x)
{
for (int i=1;i<=4;i++)
{
int s=y+yy[i];
int h=x+xx[i];
if(h>=1 && s>=1 && h<=m && s<=n)
{
if(a[s][h]=='.' && biaoji[s][h]==0)
{
biaoji[s][h]=1;
sum++;
DFS(s,h);
}
}
}
}
int main ()
{
while (cin >> m >> n)
{
if(m==0 && n==0) break;
memset(a, 0, sizeof(a));
memset(biaoji, 0, sizeof(biaoji));
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
cin >> a[i][j];
}
}
sum=1;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if(a[i][j]=='@')
{
DFS(i,j);
}
}
}
cout << sum << endl;
}
return 0;
}



京公网安备 11010502036488号