两点(DFS)
福克斯在玩一款手机解迷游戏,这个游戏叫做”两点”。基础级别的时候是在一个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遍历二维数组,每个点只走一次,如果一个点即将走的下一个点的另外三个点是之前走过的点且颜色相同说明包含环
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = ;
char mp[N][N];
int dx[] = {, -, , };
int dy[] = {, , , -};
int vis[N][N];
int n, m;
int check(int x, int y) {
return x >= && x < n && y >= && y < m;
}
int dfs(int x, int y) {
int flag = ;
vis[x][y] = ;
for(int i = ; i < ; i++) {
int nx = x + dx[i], ny = y + dy[i];
if(check(nx, ny) && mp[nx][ny] == mp[x][y] && !vis[nx][ny]) {
for(int j = ; j < ; j++) {
int mx = nx + dx[j], my = ny + dy[j];
if(mx == x && my == y) continue;
if(check(mx, my) && mp[mx][my] == mp[x][y] && vis[mx][my]) return ;
}
flag += dfs(nx, ny);
}
}
return flag;
}
int main() {
while(scanf("%d%d", &n, &m) == ) {
for(int i = ; i < N; i++)
for(int j = ; j < N; j++) vis[i][j] = ;
for(int i = ; i < n; i++) scanf("%s", mp[i]);
int flag = ;
for(int i = ; i < n; i++) {
for(int j = ; j < m; j++) {
if(!vis[i][j] && dfs(i, j)) {
flag = ;
break;
}
}
if(flag) break;
}
if(flag) printf("Yes\n");
else printf("No\n");
}
return ;
}
两点(DFS)的更多相关文章
- POJ-3204-Ikki's Story I - Road Reconstruction(最大流)
题意: 给一个有向图 求给那些边增加容量能增加总的流量,求边的条数 分析: 一开始求的是割边,结果wa了,那是因为有些割边增加了容量,但总的容量也不会增加 只有满流的边并且从源点汇点都有一条可扩展的路 ...
- 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)
Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...
- 2018中国大学生程序设计竞赛 - 网络选拔赛 1009 - Tree and Permutation 【dfs+树上两点距离和】
Tree and Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- dfs+记忆化搜索,求任意两点之间的最长路径
C.Coolest Ski Route 题意:n个点,m条边组成的有向图,求任意两点之间的最长路径 dfs记忆化搜索 #include<iostream> #include<stri ...
- 使用DFS求任意两点的所有路径
先上代码: public static void findAllPaths(Integer nodeId,Integer targetNodeId, Map<Integer,ArrayList& ...
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- DFS序+线段树 hihoCoder 1381 Little Y's Tree(树的连通块的直径和)
题目链接 #1381 : Little Y's Tree 时间限制:24000ms 单点时限:4000ms 内存限制:512MB 描述 小Y有一棵n个节点的树,每条边都有正的边权. 小J有q个询问,每 ...
- dfs判断连通图(无向)
在图论中,连通图基于连通的概念.在一个无向图 G 中,若从顶点vi到顶点vj有路径相连(当然从vj到vi也一定有路径),则称vi和vj是连通的.如果 G 是有向图,那么连接vi和vj的路径中所有的边都 ...
- HDU 2376 树形dp|树上任意两点距离和的平均值
原题:http://acm.hdu.edu.cn/showproblem.php?pid=2376 经典问题,求的是树上任意两点和的平均值. 这里我们不能枚举点,这样n^2的复杂度.我们可以枚举每一条 ...
随机推荐
- idea输出目录详解
引言:在项目中遇到了一个问题,在使用idea时,项目中Tomcat的虚拟目录映射总是失败,而当我采用myeclipse时却能映射过去. 自己花费了很长时间,终于找出了问题所在,原来是由于idea自己采 ...
- mysql 清空表——truncate 与delete的区别
清空表 truncate table [表名]: delete from [表名]: 注: truncate是整体删除(速度较快), delete是逐条删除(速度较慢). truncate不写服务器l ...
- leecode第一百四十二题(环形链表II)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- C# 视频多人脸识别的实现
上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo基本思路如下:一.识别线程1.获取当前图片2.识别当前图片的人脸位置,并将结果存入 ...
- 在nodejs中的集成虹软人脸识别
==虹软官网地址==http://www.arcsoft.com.cn 在官网注册账号,并且申请人脸识别激活码, 选择SDK版本和运行系统(windows/linux/android/ios) ,我们 ...
- mysql 安装成功以及第一次安装成功初始化密码操作
一 把文件解压到一个目录下 这是解压后的目录 将my.ini文件考进去 双击打开my.ini 找到这两行更改成自己的解压路径保存 右键此电脑属性 找到高级系统设置配置环境变量 环境变量 新建 变量 ...
- idataway_前端
一半架构,一半标准.---纯属个人意见 ----------------------------------------- 基本的插件:(尽量使用iviews) 1.传输图片. 2.下拉框.日期控件. ...
- 第 8 章 容器网络 - 055 - 创建 macvlan 网络
1.创建 macvlan 网络 在 host1 和 host2 中创建 macvlan 网络 mac_net1: docker network create -d macvlan --subnet=1 ...
- 解码字符串 Decode String
2018-11-14 17:56:12 问题描述: 问题求解: 方法一.递归求解 最直观的解法就是递归来求了,并且很显然的这个问题可以使用递归来进行求解. public String decodeSt ...
- HTML 第十二章总结
HTML5 markup 前言 在这一章中,讲解了新的 HTML5 的一些 markup,并且对其中的<video>进行了很详细的讲解. New HTML5 elements 列表如下: ...