Fox And Two Dots
题意
查找在maze里是否有至少为4个相同的字符构成的一个循环在图形之中。这个循环是首尾相连的,且相连是上下左右相连。
思路
dfs,因为循环是在maze的任何位置所以在。。。。。。
code
#include<stdio.h>
#include<string.h>
int n,m;
char maze[55][55];
int path[55][55];
int sx,sy;
int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1}; //人生之光荣在于屡仆屡起。
char ch;
int step;
int pangduan=0;
bool judge(int x,int y)
{
int ffx,ffy;
for(int i=0;i<4;i++)
{
ffx=sx+dx[i];
ffy=sy+dy[i];
if(ffx==x && ffy==y && step>=3)
return true;
}
return false;
}
int dfs(int x,int y)
{
if(judge(x,y))
{
pangduan=1;
}
path[x][y]=0;
for(int i=0;i<4;i++)
{
int xx,yy;
xx=x+dx[i];
yy=y+dy[i];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&path[xx][yy]==-1&&maze[xx][yy]==ch)
{
step++;
dfs(xx,yy);
step--;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%s",maze[i]);
}
int flag=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
sx=i;
sy=j;
step=0;
pangduan=0;
ch=maze[i][j];
memset(path,-1,sizeof(path));
dfs(i,j);
if(pangduan==1)
{
flag=1;
break;
}
}
if(flag==1)
{
break;
}
}
if(flag==1)
printf("Yes\n");
else
printf("No\n");
return 0;
}