找到老板的位置之后,就开始搜索,把同一种所有可以的都标记
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <ctype.h>
#include <limits.h>
#include <math.h>
#include <string.h>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue>
#include <deque>
#include <vector>
#include <set>
using namespace std;
#define MAXN 100 + 10
char map[MAXN][MAXN];
int vis[MAXN][MAXN];
char op[5];
struct node{
int x;
int y;
};
int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};
int n,m;
void BFS(int X,int Y){
queue<node>q;
node front,rear;
front.x = X;
front.y = Y;
int i,xx,yy;
vis[X][Y] = 1;
q.push(front);
while(!q.empty()){
front = q.front();
q.pop();
for(i=0;i<4;i++){
xx = front.x + dx[i];
yy = front.y + dy[i];
if(xx<0 || xx>=n || yy<0 || yy>=m){
continue;
}
rear.x = xx;
rear.y = yy;
if(map[xx][yy]==map[X][Y] && vis[xx][yy]==0){
vis[xx][yy] = 1;
q.push(rear);
}
}
}
}
int main(){
int i,j;
while(~scanf("%d%d%s",&n,&m,op)){
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++){
scanf("%s",map[i]);
}
int ans = 0;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
if(map[i][j]==op[0]){
if(map[i][j-1]!='.' && vis[i][j-1]==0 && map[i][j-1]!=op[0] && j-1>=0){
ans++;
BFS(i,j-1);
}
if(map[i][j+1]!='.' && vis[i][j+1]==0 && map[i][j+1]!=op[0] && j+1<m){
ans++;
BFS(i,j+1);
}
if(map[i-1][j]!='.' && vis[i-1][j]==0 && map[i-1][j]!=op[0] && i-1>=0){
ans++;
BFS(i-1,j);
}
if(map[i+1][j]!='.' && vis[i+1][j]==0 && map[i+1][j]!=op[0] && i+1<n){
ans++;
BFS(i+1,j);
}
}
}
}
printf("%d\n",ans);
}
return 0;
}