题目链接http://acm.cugb.edu.cn/showproblem.php?problemid=1102
思路:DFS,找到标记的要计算的‘T’然后DFS找‘L’,用一次DFS后sum++;
#include<iostream>
#include<cstdio>
using namespace std;
int m,n;
char a[40][40];
int b[40][40]={0};
int sum=0;
void dfs(int i,int j)
{
sum++;
b[i][j]=1;
if(b[i+1][j] == 0 && i+1 < m && a[i+1][j]=='L')dfs(i+1,j);
if(b[i][j+1] == 0 && j+1 < n && a[i][j+1]=='L')dfs(i,j+1);
if(b[i-1][j] == 0 && i-1 >= 0 && a[i-1][j]=='L')dfs(i-1,j);
if(b[i][j-1] == 0 && j-1 >= 0 && a[i][j-1]=='L')dfs(i,j-1);
}
int main()
{
int i,j;
scanf("%d%d",&m,&n);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>a[i][j];
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j] == 'T' && b[i][j] == 0)
dfs(i,j);
}
}
printf("%d",sum);
return 0;
}