1、先确定这个president的位置,然后在搜索他的四周,判断是否有满足条件的桌子吧,因为每一个一样的字母只能算作一次,所以我使用了一个flag数组,来统计字母出现的次数。
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <iomanip>
#include <algorithm>
#include <cctype>
#include <stack>
#include <queue>
#include <string>
#include <cstring>
#include <iomanip>
#include <set>
#include <vector>
#include <cstdio>
#include <stack>
#include <sstream>
#include <cstring>
#include <map>
using namespace std;
const int INF=0x3f3f3f3f;
char arr[101][101];
int flag[102];
int main()
{
int h,w;
char pos;
memset(arr,0,sizeof(arr));
memset(flag,0,sizeof(flag));
cin>>h>>w;
cin>>pos;
int cnt=0;
for(int i=0;i<h;++i)
{
for(int j=0;j<w;++j)
{
cin>>arr[i][j];
}
}
/*for(int i=0;i<h;++i)
{
for(int j=0;j<w;++j)
{
printf("%c",arr[i][j]);
}
}*/
//cout<<pos<<endl;
//cout<<arr[2][3]<<endl;
for(int i=0;i<h;++i)
{
for(int j=0;j<w;++j)
{
if(arr[i][j]==pos)
{
// cout<<i<<" "<<j<<endl;
if(flag[arr[i-1][j]]==0&&arr[i-1][j]!=pos&&arr[i-1][j]!='.'&&arr[i-1][j]!='\0')
{
cnt++;
flag[arr[i-1][j]]++;
// cout<<i-1<<" "<<j<<" ";
}
if(flag[arr[i][j+1]]==0&&arr[i][j+1]!=pos&&arr[i][j+1]!='.'&&arr[i][j+1]!='\0')
{
cnt++;
flag[arr[i][j+1]]++;
//cout<<i<<" "<<j+1<<" ";
}
if(flag[arr[i+1][j]]==0&&arr[i+1][j]!=pos&&arr[i+1][j]!='.'&&arr[i+1][j]!='\0')
{
cnt++;
flag[arr[i+1][j]]++;
//cout<<i+1<<" "<<j<<" ";
}
if(flag[arr[i][j-1]]==0&&arr[i][j-1]!=pos&&arr[i][j-1]!='.'&&arr[i][j-1]!='\0')
{
cnt++;
flag[arr[i][j-1]]++;
//cout<<i<<" "<<j-1<<" ";
}
//cout<<endl;
}
}
}
cout<<cnt<<endl;
return 0;
}