美文网首页
走环(入门dfs)

走环(入门dfs)

作者: Celia_QAQ | 来源:发表于2019-05-27 21:19 被阅读0次

这道题是我在看DFS的时候偶然发现有个大佬(https://blog.csdn.net/qq_41003528/article/details/81428672)的博客收录了有这么道题,既然这样就看一看吧
指路:http://codeforces.com/problemset/problem/510/B

思路:只要step>3并且沿着相同的字母一直走发现有已经标记的部分,则可以判断已经形成环
其中的坑:搜索到最后一个 A 时, 它会判断它前面的一个 A 是被搜过的,并且 满足 step ,会输出 yes
所以,综上,如果遇到被搜索过的相同字母并且不是上一步的位置并且满足step,那么就一定有环。

//https://blog.csdn.net/qq_41003528/article/details/81428672
#include<cstdio>
#include<algorithm>
#include<iostream> 
#include<map>
#include<vector>
#include<set>
#include<stack> 
#include<queue>
using namespace std;
const int maxn=55;

char color;
char G[maxn][maxn];
int book[maxn][maxn];
int dir[4][2]={-1,0,0,1,
                1,0,0,-1};
int m,n,flag;

bool judge(int x,int y,int nx,int ny){
    if(nx>=0&&nx<m&&nx>=0&&ny<n&&!book[nx][ny]&&G[nx][ny]==G[x][y])
        return true;
    return false;
}

void dfs(int x,int y,int lx,int ly,int step)
{
    if(flag)return ;
    flag=0;
    book[x][y]=1;
    
    for(int i=0;i<4;i++){
        int nx=x+dir[i][0];
        int ny=y+dir[i][1];
        if(book[nx][ny]&&(lx!=nx||ly!=ny)&&step>=3&&color==G[nx][ny])
        {
            flag=1;
            return ;
        }
        if(judge(x,y,nx,ny)){
            dfs(nx,ny,x,y,step+1);
        }
    }
    return ;
}
int main(){
    cin>>m>>n;
    for(int i=0;i<m;i++)
        cin>>G[i];
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(!book[i][j])
            {
                color=G[i][j];
                dfs(i,j,0,0,0);
            }
            if(flag)break;
        }
        if(flag)break;
    }
    if(flag)cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
    return 0;
}

预期输出:


图片.png

真实输出:


图片.png
图片.png

最后文末:感谢大大https://blog.csdn.net/qq_41003528/article/details/81428672

相关文章

  • 走环(入门dfs)

    这道题是我在看DFS的时候偶然发现有个大佬(https://blog.csdn.net/qq_41003528/a...

  • DFS(素数环)

    Prime Ring Problem Problem Description A ring is compose ...

  • DFS及其应用

    内容概要: DFS类的实现 DFS求解连通分量 DFS求解点对之间的一个路径 DFS判定无环图和二分图 相关概念 ...

  • 各种DFS

    DFS邻接矩阵遍历图 DFS邻接表遍历图 DFS回溯(不走重复路径) DFS背包(可重复选) DFS背包(不可重复选)

  • BFS与DFS总结

    BFS判断连通性 DFS判断连通性 BFS最优解(不走重复路径) BFS最优解(走重复路径) DFS回溯(不走重复...

  • Currency Exchange POJ - 1860

    题意:币种兑换寻找是否有正环 计算公式 (money - Cost) * Rate 思路:spfa_dfs 判正环

  • BFS和DFS随笔

    BFS和DFS BFS和DFS视频讲解-正月点灯笼 BFS核心点是用队列存放当前搜索的点 用在有环图的时候需要存放...

  • 无向图 图的表示方法:邻接表 dfs和bfs的区别:dfs是用栈,bfs用队列 有向图 有向无环图(DAG): 不...

  • 上周一道算法题(六十)

    又是上周,唉,题目难度级别'Medium',使用语言'Python',已经三周DFS算法了,可以搞个从入门到熟悉系...

  • 图论

    基于DFS求无向连通图的环 对于每一个连通分量,如果无环则只能是树,即:边数=结点数-1 只要有一个满足 边数 >...

网友评论

      本文标题:走环(入门dfs)

      本文链接:https://www.haomeiwen.com/subject/kgbktctx.html