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 ...
随机推荐
- jenkins tomcat
tomcat增加用户配置: <role rolename="tomcat"/> <role rolename="role1"/> < ...
- shell删除最后一列、删除第一行、比较文件
删除文件第一行: sed -i '1d' filename 删除文件最后一列: awk '{print $NF}' filename 比较文件的方法: 1)comm -3 --nocheck-orde ...
- HBase-过滤器(各种过滤器及代码实现)
过滤器简介 HBase过滤器提供了非常强大的特性来帮助用户提高其处理表中数据的效率. HBase中两种主要的数据读取函数是get和scan,它们都支持直接访问数据和通过指定起止行键访问数据的功能.可以 ...
- js中对象的类型
js中的类型分为三种,"内部对象"."宿主对象"."自定义对象" 1."内部对象"有Date.Function.Arra ...
- 一款简易的CSS3扁平化风格联系表单
CSS3扁平化风格联系表单是一款CSS3简易联系表单非常清新,整体外观不是那么华丽,但是表单扁平化的风格让人看了非常舒服,同时利用了HTML5元素的特性,表单的验证功能变得也相当简单.经测试效果相当不 ...
- python基础2 - 运算符
3. 运算符 3.1 算数运算符 算数运算符是 运算符的一种 是完成基本的算术运算使用的符号,用来处理四则运算 运算符 描述 实例 + 加 10 + 20 = 30 - 减 10 - 20 = -10 ...
- Sharded数据分片定位数据
[http://www.tuicool.com/articles/UNnqUnU] Jedis分片 动机 在普通的Redis主/从方式,通常有一个主服务器负责"write"请求,多 ...
- jsonp: js跨域
JSONP是JSON with padding(填充式JSON或参数式JSON)的简写,是应用JSON的一种新方法,常用于服务器与客户端跨源通信,在后来的Web服务中非常流行.本文将详细介绍JSONP ...
- EF-按字段读取
/// <summary> /// 直接获取特定一个或者多个字段的值 /// 多个字段需要声明Model /// var s= testDal.GetScalar<dynamic&g ...
- Java面试题上
1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...