CodeForces - 510B Fox And Two Dots (bfs或dfs)
2 seconds
256 megabytes
standard input
standard output
Fox Ciel is playing a mobile puzzle game called "Two Dots". The basic levels are played on a board of size n × m cells, like this:

Each cell contains a dot that has some color. We will use different uppercase Latin characters to express different colors.
The key of this game is to find a cycle that contain dots of same color. Consider 4 blue dots on the picture forming a circle as an example. Formally, we call a sequence of dots d1, d2, ..., dk a cycle if and only if it meets the following condition:
- These k dots are different: if i ≠ j then di is different from dj.
- k is at least 4.
- All dots belong to the same color.
- For all 1 ≤ i ≤ k - 1: di and di + 1 are adjacent. Also, dk and d1 should also be adjacent. Cells x and y are called adjacent if they share an edge.
Determine if there exists a cycle on the field.
The first line contains two integers n and m (2 ≤ n, m ≤ 50): the number of rows and columns of the board.
Then n lines follow, each line contains a string consisting of m characters, expressing colors of dots in each line. Each character is an uppercase Latin letter.
Output "Yes" if there exists a cycle, and "No" otherwise.
3 4
AAAA
ABCA
AAAA
Yes
3 4
AAAA
ABCA
AADA
No
4 4
YYYR
BYBY
BBBY
BBBY
Yes
7 6
AAAAAB
ABBBAB
ABAAAB
ABABBB
ABAAAB
ABBBAB
AAAAAB
Yes
2 13
ABCDEFGHIJKLM
NOPQRSTUVWXYZ
No
In first sample test all 'A' form a cycle.
In second sample there is no such cycle.
The third sample is displayed on the picture above ('Y' = Yellow, 'B' = Blue, 'R' = Red).
题意:找同一种颜色的环
这题麻烦的地方在于走过的路被标记了,那怎么判断有环呢?
其实记录步数就可以了,bfs和dfs道理是一样的
bfs做法:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct node
{
int x,y;
};
bool v[][];
int book[][];
char a[][];
int d[][]={{-,},{,},{,-},{,}};
queue<node>q;
int main()
{
int n,m;
cin>>n>>m;
memset(v,,sizeof(v));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
cin>>a[i][j];
}
}
bool f=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(!v[i][j])
{ memset(book,,sizeof(book));
v[i][j]=;
while(!q.empty()) q.pop();
node b;
b.x=i;
b.y=j;
book[i][j]=;
q.push(b);
while(!q.empty())
{
node b=q.front();
q.pop();
for(int k=;k<;k++)
{
int xx=b.x+d[k][];
int yy=b.y+d[k][];
if(xx<||yy<||xx>n||yy>m||a[xx][yy]!=a[i][j]) continue;
v[xx][yy]=;
node c;
c.x=xx;
c.y=yy;
if(book[xx][yy]>=book[b.x][b.y])//如果当前走过去格子有步数且的步数比当前这个格子还要大,说明已经走过了,形成了环。
{ f=;break;
}
if(book[xx][yy])continue;
q.push(c);
book[xx][yy]=book[b.x][b.y]+;//保存路的步数
}
if(f) break;
}
if(f) break;
}
if(f) break;
}
if(f) break;
}
if(f) cout<<"Yes";
else cout<<"No";
return ; }
dfs也是同样道理:
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
char a[][];
bool book[][];
int v[][];
int z[];
int n,m;
int d[][]={{-,},{,},{,},{,-}};
bool f=;
int si,sj;
void dfs(char c,int x,int y)
{ for(int i=;i<;i++)
{
int xx=x+d[i][];
int yy=y+d[i][];
if(xx<||yy<||xx>n||yy>m) continue;
if(v[xx][yy]!=&&v[x][y]-v[xx][yy]>)//走过去的格子已经有值了且比现在走的格子还大不止1,大1可能是之前走过来的
{
f=;
return;
}
if(a[xx][yy]==c&&v[xx][yy]==)
{
v[xx][yy]=v[x][y]+;
book[xx][yy]=;
dfs(c,xx,yy);
if(f) return;
v[xx][yy]=; }
}
} int main()
{
scanf("%d %d",&n,&m);
memset(z,,sizeof(z));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(!book[i][j])
{
z[a[i][j]-'A']=;
memset(v,,sizeof(v));
book[i][j]=;
si=i;
sj=j;
v[i][j]=;
dfs(a[i][j],i,j);
if(f) break;
}
}
if(f) break;
}
if(f) cout<<"Yes";
else cout<<"No";
return ;
}
CodeForces - 510B Fox And Two Dots (bfs或dfs)的更多相关文章
- codeforces 510B. Fox And Two Dots 解题报告
题目链接:http://codeforces.com/problemset/problem/510/B 题目意思:给出 n 行 m 列只有大写字母组成的字符串.问具有相同字母的能否组成一个环. 很容易 ...
- Codeforces 510B Fox And Two Dots 【DFS】
好久好久,都没有写过搜索了,看了下最近在CF上有一道DFS水题 = = 数据量很小,爆搜一下也可以过 额外注意的就是防止往回搜索需要做一个判断. Source code: //#pragma comm ...
- CF 510b Fox And Two Dots
Fox Ciel is playing a mobile puzzle game called "Two Dots". The basic levels are played on ...
- Codeforces Round #290 (Div. 2) B. Fox And Two Dots dfs
B. Fox And Two Dots 题目连接: http://codeforces.com/contest/510/problem/B Description Fox Ciel is playin ...
- 17-比赛2 F - Fox And Two Dots (dfs)
Fox And Two Dots CodeForces - 510B ================================================================= ...
- Fox And Two Dots
B - Fox And Two Dots Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I6 ...
- B. Fox And Two Dots
B. Fox And Two Dots time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- CF Fox And Two Dots (DFS)
Fox And Two Dots time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- CF510B Fox And Two Dots(搜索图形环)
B. Fox And Two Dots time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
随机推荐
- Android LCD(二):常用接口原理篇【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/9125799 关键词:Android LCD TFT TTL(RGB) LVDS E ...
- iptable防火墙面试题
第1章 (一)基础口试题 1.1 详述 iptales 工作流程以及规则过滤顺序? 1.防火墙是一层层过滤的.实际是按照配置规则的顺序从上到下,从前到后进行过滤的. 2.如果匹配上了规则,即明确表明是 ...
- freemarker 异常处理
SSH2处理方案: freemarker文件如果出错,网站的前台页面会报出很明显的错误-焦黄的背景,血红的文字,很不利于用户体验的.如何修改这个问题呢?首先需要在struts.xml配置文件里添加下面 ...
- P3391 文艺平衡树
hh 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...
- apache实现http自动转为https
1.确认此服务器apache已经配置过证书可以用https访问到 2.确认/etc/apache2/ports.conf 下有 Listen 80Listen 443(此条) 3.配置虚礼主机定将域名 ...
- MySQL数据copy
摘自http://database.51cto.com/art/201011/234776.htm 1. 下面这个语句会拷贝表结构到新表newadmin中. (不会拷贝表中的数据) CREATE TA ...
- Compaction介绍
Compaction介绍 Compaction是buffer->flush->merge的Log-Structured Merge-Tree模型的关键操作,主要起到如下几个作用: 1)合并 ...
- 深入理解Servlet3.0异步请求
异步请求的基础概念 异步请求最直接的用法就是处理耗时业务,Http协议是单向的,只能客户端拉不能服务器主推. 异步请求的核心原理主要分为两大类:1.轮询.2长连接 轮询:就是定时获取返回结果. 长连接 ...
- js 实现自动调出键盘
在app中,在页面加载完成之后,给输入框添加一个focus,不能自动调出软键盘,可以用以下方式实现: //触发键盘 $("#content").on("touchstar ...
- mysql数据库优化课程---4、mysql字段属性
mysql数据库优化课程---4.mysql字段属性 一.总结 一句话总结: mysql字段:没有被淘汰的必然有其存在的合理性(也就是有优点),比如char类型 1.为什么char类型没有被淘汰? c ...