Codeforces510B【dfs】

来源:互联网 发布:南大碎尸 知乎 编辑:程序博客网 时间:2024/06/05 08:44

判断一个图里是否有一个自环;
50*50
标记起点,然后暴搜?

#include <bits/stdc++.h>#include<algorithm>using namespace std;const int N=55;int n,m;int dx[4]={1,-1,0,0};int dy[4]={0,0,-1,1};char ma[N][N];bool vis[N][N];bool flag;int sx,sy,num;void dfs(char k,int x,int y){    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]!=ma[x][y])            continue;        if(!vis[xx][yy])        {            vis[xx][yy]=1;            num++;            dfs(ma[xx][yy],xx,yy);            num--;            vis[xx][yy]=0;        }        if(num>=3&&xx==sx&&yy==sy)        {            flag=1;            return;        }    }}int main(){    scanf("%d%d",&n,&m);    for(int i=0;i<n;i++)        scanf("%s",ma[i]);    flag=false;    for(int i=0;i<n;i++)    {        for(int j=0;j<m;j++)        {            memset(vis,0,sizeof(vis));            vis[i][j]=1;            num=0;            sx=i;            sy=j;            dfs(ma[i][j],i,j);            if(flag)            {                printf("Yes\n");                return 0;            }        }    }    printf("No\n");    return 0;}
0 0
原创粉丝点击