题干:

福克斯在玩一款手机解迷游戏,这个游戏叫做”两点”。基础级别的时候是在一个n×m单元上玩的。像这样:

 
 

每一个单元有包含一个有色点。我们将用不同的大写字母来表示不同的颜色。

这个游戏的关键是要找出一个包含同一颜色的环。看上图中4个蓝点,形成了一个环。一般的,我们将一个序列 d1,d2,...,dk 看成一个环,当且仅当它符合下列条件时:

1.    这k个点不一样,即当 i≠j时, di 和 dj不同。

2.    k至少是4。

3.    所有的点是同一种颜色。

4.    对于所有的 1≤i≤k-1: di 和 di+1 是相邻的。还有 dk 和 d1 也应该相邻。单元 x 和单元 y 是相邻的当且仅当他们有公共边。

当给出一幅格点时,请确定里面是否有环。

Input

单组测试数据。 
第一行包含两个整数n和m (2≤n,m≤50):板子的行和列。 
接下来n行,每行包含一个有m个字母的串,表示当前行每一个点的颜色。每一个字母都是大写字母。

Output

如果有环输出Yes,否则输出No。

Sample Input

3 4
AAAA
ABCA
AAAA
3 4
AAAA
ABCA
AADA

Sample Output

Yes
No

解题报告:

数据水啊,纯暴力都能过。

这题其实dfs中的状态,加一个前驱的记录,就不需要step了,这样可以优化时间了。因为我们可以先跑并查集,然后一个集合一个集合的搜,如果搜到以前搜过的点,那就return 1;。

这样好处是,不需要一个一个点的搜索了,另外,这题vis数组是不需要回溯的。

另外,算是个dfs(换句话来说,是搜索的)的共同坑点吧,那就是对起点的标记,因为经常在起点那里就落下一个状态,,,比如【51Nod - 1268】和为K的组合 (背包 或 dfs)这题。

AC代码:

#include<bits/stdc++.h>using namespace std;
int n,m;
int nx[4] = {0,1,0,-1};
int ny[4] = {1,0,-1,0};
bool vis[55][55];
char maze[55][55];
bool ok(int x,int y) {if(x <= n && x >= 1 && y <= m && y >= 1) return 1;return 0;
}
bool dfs(int idx,int idy,char tar,int x,int y,int step) {if(x == idx && y == idy && step >=3 ) {return 1;}for(int k = 0; k<4; k++) {int tx = x+nx[k];int ty = y+ny[k];if(ok(tx,ty) && maze[tx][ty] == tar && vis[tx][ty] == 0) {vis[tx][ty]=1;if(dfs(idx,idy,tar,tx,ty,step+1)) return 1;}}return 0 ;}
int main()
{while(~scanf("%d%d",&n,&m)) {int flag = 0;memset(vis,0,sizeof vis);for(int i = 1; i<=n; i++) {scanf("%s",maze[i]+1);}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {for(int k = 0; k<4; k++) {if(maze[i+nx[k]][j+ny[k]] != maze[i][j]) continue;memset(vis,0,sizeof vis);vis[i+nx[k]][j+ny[k]]=1;
//                  vis[i][j]=1;if(dfs(i,j,maze[i][j],i+nx[k],j+ny[k],0)) {flag=1;break;}}if(flag) break;}if(flag) break;}if(flag) puts("Yes");else puts("No");}return 0 ;} 

总结:

刚开始还是犯了小错误,三层for那里,最外面两层都写的是<=n....其实内层应该是<=m

【51Nod - 1416】两点 (dfs 或 并查集+dfs)相关推荐

  1. 大力飞砖之DFS与并查集(中-下)

    文章目录 前言 并查集 集合表示法 树状表示法 Parent "数组" 组装模板 DFS搜索并查集 题目 手动搜索 转换计算机 (补充)基于"交换数组位置的全排列&quo ...

  2. [COCI2017-2018#5] Pictionary(并查集+dfs)

    贼ex的一道,卡了本仙女整整7个小时orz 思路容易理解,but码力very重要orz 我愿意花五毛钱提升我的码力,换个脑子也行,不换脸这张脸生得俊俏 luogu传送door 题目 在宇宙一个不为人知 ...

  3. 一笔画问题 (DFS或并查集)

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=42 一笔画问题是欧拉回路的一个变形,可以一笔画的条件有两个:1.所有顶点必须连通  2. ...

  4. hdu1181变形课dfs/bfs/并查集三种解法(java)

    题目链接 Problem Description 呃-变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个 ...

  5. hdu1198 Farm Irrigation —— dfs or 并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198 dfs: 1 #include<cstdio>//hdu1198 dfs 2 #in ...

  6. zoj 3761 Easy billiards 并查集+dfs

    生活真是奇妙的东西,这样的题目居然能被联想到这样的算法,只能说智商不够啊. 这道题目的意思不解释了,月赛的时候我队友已经想出来了做法,但是我们最后还是没A. 题解: 1.首先将所有能连接的球连接起来, ...

  7. 2018/8/9 MultiU 6 并查集+dfs,反向建边提高查询效率 !!! / 最大字段和n维(降维)/ 状压+中途相遇法...

    hdu6370 Werewolf http://acm.hdu.edu.cn/showproblem.php?pid=6370 题意:村民只能说真话,狼人"可以"撒谎,每个人说一句 ...

  8. UVA - 208 Firetruck(并查集+dfs)

    题目: 给出一个结点d和一个无向图中所有的边,按字典序输出这个无向图中所有从1到d的路径. 思路: 1.看到紫书上的提示,如果不预先判断结点1是否能直接到达结点d,上来就直接dfs搜索的话会超时,于是 ...

  9. [Leedcode][JAVA][第200题][岛屿数量][DFS][BFS][并查集]

    [问题描述] 第200题 岛屿数量 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量.岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成 ...

最新文章

  1. pycharm安装scrapy失败_运行Scrapy程序时出现No module named win32api问题的解决思路和方法...
  2. 计算机办公实用技能项目实践教程,计算机常用办公软件应用/21世纪计算机科学与技术实践型教程...
  3. Shell-11--for
  4. python邮件发送csv附件_Python2.7 smtplib发送带附件邮件报错STARTTLS解决方法
  5. 20189222 《网络攻防实践》第二周作业
  6. Spring 构造注入 传參数
  7. ALV可输入状态下输入金额字段变小数的问题
  8. Windows界面编程_Miniblink(2) 嵌入到Win32窗口里
  9. 利用腾讯云独立IP使用windows用CCProxy搭建Socks5多IP代理服务器图文教程实现单窗口单IP
  10. Computer:C盘简介成功解决当Win10系统进行深度学习的时候发现系统C盘满了,教你如何正确卸载一些非必要的内容(提高磁盘内存和网速)
  11. 机器学习之有监督学习,无监督学习,半监督学习
  12. 常用的学术论文研究方法(着重讲解文献法)
  13. linux 下 packet_mmap 前篇 (抓包实现)
  14. 一致性检验 -- Kappa 系数
  15. TestNG 单元测试框架的使用
  16. 二十年间的失败软件和系统
  17. Radix Tree总结
  18. excel公式编辑器_V14.0发布:组件化编辑器+数据透视表
  19. linux统计代码耗时函数,统计函数执行耗时
  20. Docker 常用命令收录 -- 持续更新

热门文章

  1. 概率中比较重要的知识
  2. 企业是否应该实现对客户需求的快速响应_互联网企业的数据化迭代和数据化应用...
  3. linux ubantu扩展空间,ubuntu 扩展存储空间
  4. sap bom递归_SAP软件之化工行业特点01
  5. matlab铁路平板车装货问题,两辆铁路平板车的装货问题最终论文
  6. python中numpy是什么_什么是NumPy?
  7. html5 支持php标签吗,HTML5新增标签使用方法
  8. excel条形码字体_在Excel中批量生成条形码,竟如此简单!
  9. 五大算法之三--贪心算法
  10. 小米功能机支持java吗_小米竟然卖功能机了!2.8吋/15天超长待机