zoukankan      html  css  js  c++  java
  • Codeforces Round #290 (Div. 2) B. Fox And Two Dots dfs

    B. Fox And Two Dots

    题目连接:

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

    Description

    Fox Ciel is playing a mobile puzzle game called "Two Dots". The basic levels are played on a board of size n × m cells, like this:

    Each cell contains a dot that has some color. We will use different uppercase Latin characters to express different colors.

    The key of this game is to find a cycle that contain dots of same color. Consider 4 blue dots on the picture forming a circle as an example. Formally, we call a sequence of dots d1, d2, ..., dk a cycle if and only if it meets the following condition:

    These k dots are different: if i ≠ j then di is different from dj.

    k is at least 4.

    All dots belong to the same color.

    For all 1 ≤ i ≤ k - 1: di and di + 1 are adjacent. Also, dk and d1 should also be adjacent. Cells x and y are called adjacent if they share an edge.

    Determine if there exists a cycle on the field.

    Input

    The first line contains two integers n and m (2 ≤ n, m ≤ 50): the number of rows and columns of the board.

    Then n lines follow, each line contains a string consisting of m characters, expressing colors of dots in each line. Each character is an uppercase Latin letter.

    Output

    Output "Yes" if there exists a cycle, and "No" otherwise.

    Sample Input

    3 4
    AAAA
    ABCA
    AAAA

    Sample Output

    Yes

    Hint

    题意

    给你一个n*m的网格

    然后问你是否有只含有一种元素的环

    题解:

    dfs就好了

    dfs的时候,记录一下fa,然后一直跑下去,跑到曾经vis过的地方,就说明遇到了环

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    char mp[55][55];
    int vis[55][55];
    int flag = 0;
    int dx[4]={1,-1,0,0};
    int dy[4]={0,0,1,-1};
    int n,m;
    void dfs(int x,int y,char c,int fax,int fay)
    {
        vis[x][y]=1;
        if(flag)return;
        for(int i=0;i<4;i++)
        {
            int xx = x+dx[i];
            int yy = y+dy[i];
            if(xx==fax&&yy==fay)continue;
            if(xx<0||xx>=n)continue;
            if(yy<0||yy>=m)continue;
            if(mp[xx][yy]!=c)continue;
            if(vis[xx][yy]){
                flag=1;
                return;
            }
            dfs(xx,yy,c,x,y);
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
            scanf("%s",&mp[i]);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
            {
                if(!vis[i][j])
                    dfs(i,j,mp[i][j],i,j);
            }
        if(flag)printf("Yes");
        else printf("No
    ");
    }
  • 相关阅读:
    2015531 网络攻防 Exp1 PC平台逆向破解(5)M
    2017-2018-1 20155331 嵌入式C语言
    20155330 《网络对抗》 Exp9 web安全基础实践
    20155330 《网络对抗》 Exp8 Web基础
    20155330 《网络对抗》 Exp7 网络欺诈防范
    20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
    20155330 《网络对抗》 Exp5 MSF基础应用
    20155330 《网络攻防》 Exp4 恶意代码分析
    20155330 《网络攻防》 Exp3 免杀原理与实践
    20155330 《网络对抗》 Exp2 后门原理与实践
  • 原文地址:https://www.cnblogs.com/qscqesze/p/5077090.html
Copyright © 2011-2022 走看看