题目链接: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; }