【简易DFS/BFS+标记搜索次序的数组】zznu-2025 : 简单环路
2025 : 简单环路
时间限制:1 Sec 内存限制:128 MiB
提交:145 答案正确:41
题目描述
输入
输出
若存在“简单环路”输出“Yes”,否则输出“No”。
样例输入
3 4
AAAA
ABCA
AADA
样例输出
No
大致思路:
1、深度搜索这个图,不需要回头即可,一直沿着上下左右可以走的方向走下去,用order来标记一下搜索的先后次序,每次搜索一个节点更新dp里的值为order的值,并把当前节点置为‘#’,所有判断回路的时候判断 abs(dp[x][y]-dp[xx][yy])>=3,即可。
2.我的另一篇博客里,用的是tarjan算法判环的。本篇的搜索,用广搜也是同一个道理。时间复杂度O(n*m)。
3.提供几个参考数据:
AAAA
ABCA
AAAA
3 4
AAAA
ABCA
AADA
3 4
AABB
ABBB
AAAA
3 4
AABB
BBBA
AAAA
简单题解:
解封此debug();函数的注释,可以看到搜索内容。其余有注释。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include<math.h>
#include <string.h>
#include<deque>
using namespace std;
#define inf 0x3f3f3f3f
const double pi=acos(-1.0);
#define ll long long
using namespace std;
#define inf 0x3f3f3f3f
#define N 55 char str[N][N];
int flag,n,m;
int b[][]= {{-,},{,},{,-},{,}};
int dp[N][N];//存贮每个点遍历时的次序 void dfs(int x,int y,int sum,char ch,int order){
if(flag==)
return ;
dp[x][y]=order;
str[x][y]='#'; for(int i=; i<; i++){
int xx=x+b[i][];
int yy=y+b[i][];
if(xx>=n||yy>=m||xx<||yy<)//单向深度搜索,只搜索相同的字符
continue;
if(str[xx][yy]=='#'&&dp[xx][yy]!=-){//遇见本次搜索中相同的字符
if(abs(dp[x][y]-dp[xx][yy])>=){//之前搜索过的字符,判断两者之间的次序差即可
flag=;
return ;
}
}
if(str[xx][yy]!=ch)//可能遇见dp[xx][yy]==-1的情况,需要过滤掉
continue;
dfs(xx,yy,sum,ch,order+);
}
}
void debug(){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
printf("*%d ",dp[i-][j-]);
}
cout<<endl;
}
printf("flag=%d\n",flag);
}
int main()
{
while(cin>>n>>m){
flag=;
for(int i=; i<n; i++)
scanf("%s",str[i]);
for(int i=; i<n; i++){
for(int j=; j<m; j++){
if(flag==)
break;
if(str[i][j]!='#'){
memset(dp,-,sizeof(dp));
dfs(i,j,,str[i][j],);
// debug();//解封此注释,可以看到搜索内容
}
}
} if(flag)
printf("Yes\n");
else
printf("No\n"); }
return ;
}
【简易DFS/BFS+标记搜索次序的数组】zznu-2025 : 简单环路的更多相关文章
- DFS+BFS(广度优先搜索弥补深度优先搜索遍历漏洞求合格条件总数)--09--DFS+BFS--蓝桥杯剪邮票
题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)
[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...
- DFS&&BFS
DFS DFS搜索是按照深度的方向搜索,它类似于树的先根遍历,是树的先根遍历的推广. 1.从图的某个顶点v0出发,首先访问v0, 2.找出刚访问过的顶点的第一个未被访问过的邻接点,然后访问该结点,以该 ...
- 图的数据结构的实现与遍历(DFS,BFS)
//图的存储结构:const int MAXSIZE = 10;//邻接矩阵template<class T>class MGraph {public: MGraph(T a[], ...
- 【427】Graph 实现 以及 DFS & BFS
目录: Graph 实现 二维数组实现 Linked List 实现 DFS:深度优先搜索 stack 实现 recursion 实现 BFS:广度优先搜索(queue) 其他应用 非连通图遍历 - ...
- POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...
- POJ2308连连看dfs+bfs+优化
DFS+BFS+MAP+剪枝 题意: 就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路: 首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...
随机推荐
- 慕课零基础学java语言翁恺老师——第二周编程题
1.时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果 ...
- 网络编程(socket).WinSocket_recvfrom出错,GetLastError()为10054
1.在写 我的Qt598(vs2017)x64版本的 shadowsocks程序时遇到的. 具体问题情况 大概是这样:QUdpSocket(假设是sktA) connect接收函数,sktA侦听 端口 ...
- 高级UI-RecyclerView头部和尾部添加
在ListView中,可以添加头部和尾部,其添加方法也是十分的简单,直接调用listview.addHeaderView(view);和listview.addFooterView(view);即可, ...
- iOS-AES算法总结
AESCipher.h #import <Foundation/Foundation.h> @interface AESCipher : NSObject /** 加密算法 @param ...
- UiPath工具当中写入代码
在UIPath的工具中选择下面的控件 点击[Edit Code]之后出现写代码的地方,入力VB.net代码 点击[Edit Arguments]之后是这个方法的传入和传出的值. 下面自己做的一个小例子 ...
- IO-file-07 递归
package com.bwie.io; /** * 递归: * 方法自己调用自己 * 递归头:何时结束递归 * 递归体:重复调用 * @author Allen17805272076 * */ pu ...
- Beginning Linux Programming 学习-chapter2-Shell programming-Pipes and Redirection
"为了从事创造性工作,人类需要孤独,可是在孤独中,广义的人类仍存在于内心."--(德国)奥铿 ...
- Java 最常见 200+ 面试题 + 全解析
本文分为十九个模块,分别是: Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Spring Clou ...
- HADOOP 与 jupyterlab 链接
首先 咱们先把jdk1.0.0_60.tar.gz 和 hadoop-2.7.2.tar.gz 的压缩包放到root根目录下的opt文件夹下 如图: 然后 ...
- 工具——eclipse debug小技巧
1.开启调试: 在代码编辑处右键单击,在弹出菜单中点击Debug As开始调试 2.几个快捷键: F5:跟入Step into, 一般会跟踪进入到调用函数的函数体,Step Over则不会跟踪进入,直 ...