Codeforces Round #290 (Div. 2) B. Fox And Two Dots(DFS)

时间:2023-03-09 01:28:42
Codeforces Round #290 (Div. 2) B. Fox And Two Dots(DFS)

http://codeforces.com/problemset/problem/510/B

#include "cstdio"
#include "cstring"
int r,c;
char map[][];
int vis[][];
int mark;
int dx[]={,-,,},dy[]={,,,-};
int judge(int x,int y)
{
if(x<||x>=r||y<||y>=c)
return ;
return ;
}
void dfs(int x,int y,int perX,int perY)
{
if(!judge(x,y))
return;
vis[x][y]=;
for(int i=;i<;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(map[xx][yy]==map[x][y]&&judge(xx,yy)&&(xx!=perX||yy!=perY))
{
if(vis[xx][yy])
{
mark=;
return;
}
dfs(xx,yy,x,y);
}
}
return;
}
int main()
{
while(scanf("%d%d",&r,&c)!=EOF)
{
memset(vis,,sizeof(vis));
for(int i=;i<r;i++)
scanf("%s",map[i]);
mark=;
int flag=;
for(int i=;i<r;i++)
{
for(int j=;j<c;j++)
{
if(!vis[i][j])
{
dfs(i,j,,);
if(mark)
{
break;
}
}
}
if(mark)
{
break;
}
}
if(mark)
printf("Yes\n");
else
printf("No\n"); }
return ;
}