思路:
暴力整个图,以这个为起点,然后看一下有没有找到一条路是会指向自己且元素个数>=4;
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int mod=1e9+7; const int N=55; char ma[N][N]; bool vis[N][N]; int n,m; int s,t; int flag; int dx[4]={0,0,-1,1}; int dy[4]={1,-1,0,0}; void DFS(int x,int y,char tt,int num) { if(flag) return; for(int i=0;i<4;i++) { int xx=x+dx[i]; int yy=y+dy[i]; if(xx<0||yy<0||xx>=n||yy>=m||ma[xx][yy]!=tt) continue; if(xx==s&&yy==t&&num>=3) { flag=1; return; } if(vis[xx][yy]) continue; vis[xx][yy]=true; DFS(xx,yy,tt,num+1); } } int main() { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%s",ma[i]); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { memset(vis,0,sizeof(vis)); vis[i][j]=true; s=i; t=j; flag=0; DFS(i,j,ma[i][j],0); if(flag) { puts("Yes"); return 0; } } } puts("No"); return 0; }