题意:判断相同字母能否连成环;
bfs直接开搞;
#include<bits/stdc++.h>
using namespace std;
int d[4][2] = {0,1,1,0,0,-1,-1,0};//遍历四个方向
int vis[100][100];
char tu[100][100];
int n, m, ans;
void bfs(int x, int y, int nx, int ny){//从nx ny 开始走到x y
if(vis[x][y]){ //是否走过
ans = 1;
return ;
}
vis[x][y] = 1; //标记为走过
int xx, yy;
for(int i=0; i<4; i++){ //遍历周围
xx = x+d[i][0];
yy = y+d[i][1];
if(xx==nx&&yy==ny) continue; //排除原来的点
if(tu[xx][yy]==tu[x][y]){ // 找到下一个相连的相同字母
bfs(xx,yy,x,y);
}
}
}
int main(){
ios::sync_with_stdio(false);
cin >> n >> m ;
memset(vis,0,sizeof(vis));
for(int i=0; i<n; i++){
cin >> tu[i];
}
ans = 0;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(!vis[i][j]){
bfs(i,j,i,j);
}
if(ans) break;
}
if(ans) break;
}
if(ans) {
cout << "Yes" <<endl;
}else{
cout << "No" <<endl;
}
return 0;
}