https://www.luogu.com.cn/problem/CF6B
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
int n,m;
char c;
char str[N][N];
int ans;
bool st[N][N];
int num;
bool vis[26];
void dfs(int x,int y)
{
st[x][y]=1;
int dx[]={0,0,1,-1,},dy[]={1,-1,0,0};
for(int i=0;i<4;i++)
{
int a=x+dx[i],b=y+dy[i];
if(a<0||b>n||b<0||b>m||str[a][b]=='.'||st[a][b]==1) continue;
if(vis[str[a][b]-'A']!=1&&str[a][b]!=c)//真正的桌子
{
vis[str[a][b]-'A']=1;
st[a][b]=1;
}
}
}
int main()
{
cin>>n>>m>>c;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>str[i][j];
memset(vis,0,sizeof vis);
memset(st,0,sizeof st);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(c==str[i][j])
dfs(i,j);
for(int i=0;i<26;i++)
if(vis[i]) ans++;
cout<<ans<<endl;
return 0;
}