说一个坑点:对于bool类型的dfs,有两种情况都是返回true的,一是这一层dfs中符合要求返回true,而是接下来的某层(dfs函数)符合要求返回true,二者缺一不可(在这个地方WA了好久,啊啊啊啊啊啊啊!!!!!!!!!!)
AC代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
//#define int long long
const int maxn=1e6+5;
typedef long long ll;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
char ch[100][100];
int n,m,vis[100][100];
bool dfs(int x,int y,int fx,int fy,char c){
vis[x][y]=1;
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx==fx&&ny==fy)continue;
if(nx<1||nx>n||ny<1||ny>m||ch[nx][ny]!=c)continue;
if(vis[nx][ny])return true;
if(dfs(nx,ny,x,y,c))return true;//没有这一步会WA!!!!!!!!!
}
return false;
}
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)cin>>ch[i][j];
int flag=0;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
if(!vis[i][j]) {
if(dfs(i,j,-1,-1,ch[i][j])) {flag=1;break;}
}
if(flag)cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}