ac代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 55;
int px[4]= {1,-1,0,0};
int py[4]= {0,0,1,-1};
char map[N][N];
bool vis[N][N];
int temp,c1,c2,n,m;
bool check(int x,int y) {
int flag=0;
for(int k=0; k<4; k++) {
int u=x+px[k];
int v=y+py[k];
if(u>=0&&v>=0&&u<n&&v<m&&map[u][v]==map[c1][c2]&&vis[u][v])
flag++;
}
// printf("%d---\n",flag);
if(flag>=2)
return true;
return false;
}
bool judge(int x,int y) {
if(x>=0&&y>=0&&x<n&&y<m&&map[x][y]==map[c1][c2]&&!vis[x][y])
return true;
return false;
}
void dfs(int i,int j,int cnt) {
cnt++;
vis[i][j]=true;
if(check(i,j)&&cnt>=4)
temp=1;
for(int l=0; l<4; l++) {
int nx=i+px[l];
int ny=j+py[l];
if(judge(nx,ny)) {
vis[nx][ny]=true;
dfs(nx,ny,cnt);
}
}
}
int main() {
while(scanf("%d%d",&n,&m)!=EOF) {
temp=0;
for(int i=0; i<n; i++) {
scanf("%s",map[i]);
}
memset(vis,false,sizeof(vis));
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(!vis[i][j]) {
c1=i,c2=j;
dfs(i,j,0);
}
}
}
printf(temp==1?"Yes\n":"No\n");
}
return 0;
}