【简易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的连连看状态,然后问你最后能不能全部消没? 思路: 首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...
随机推荐
- 学习docker笔记1
docker是一个能够把开发应用程序自动部署到容器的开源引擎 docker通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过写时复制机制(copy-on-write)实现了高 ...
- 理解KNN算法中的k值-knn算法中的k到底指的是什么 ?
2019-11-09 20:11:26为方便自己收藏学习,转载博文from:https://blog.csdn.net/llhwx/article/details/102652798 knn算法是指对 ...
- 解决X-Scan安装后“无法启动此程序,因为计算机丢失NPPTools.dll”
最近在一本书中看到X-Scan这个扫描器,虽说X-Scan相比现在的扫描器已经有点过时了,但也想下载来试一试,谁知道在VM中Win7安装时出现这种问题 可以在脚本之家找到缺失的这个文件:https:/ ...
- 【C/C++开发】关于位域操作
几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存对齐全攻略–涉及位域的内存 ...
- CentOS 7 安装wordpress
1.安装php 要安装php 7,必须使用下面的命令在Centos7系统上安装并启用epel和remi存储库. 输入一下代码, yum install http://rpms.remirepo.net ...
- Mui 沉浸模式以及状态栏颜色改变
手机的顶部状态栏,也就是信号.电量那条,有4种状态,分别是正常.变色.透明(也称沉浸式状态栏).消失(也就是全屏).后3种特殊用法,具体见下: 这些都是真机运行不生效,需提交App云端打包后才生效: ...
- JMeter接口自动化学习笔记(一)
实例教程:https://blog.csdn.net/kasijia/article/details/79405815 https://www.cnblogs.com/rd-ddddd/p/95782 ...
- 【C++札记】类的分离式写法
介绍 类的分离式写法,使得代码更加规范,增强了阅读性. 分离式写法的规则: 1.类的变量:写在类的里面 2.成员函数:类中写函数的声明,函数的定义写在类体外. 3.写在类外函数定义时,类名前加限定(O ...
- Python【BeautifulSoup解析和提取网页数据】
[解析数据] 使用浏览器上网,浏览器会把服务器返回来的HTML源代码翻译为我们能看懂的样子 在爬虫中,也要使用能读懂html的工具,才能提取到想要的数据 [提取数据]是指把我们需要的数据从众多数据中挑 ...
- asp.net core-10.Http请求的处理过程
左边是一个普通的网页请求过程,右边是.net core请求过程 这是大致请求流程图: