问题 J: 棋盘行走

时间限制: 1 Sec  内存限制: 128 MB
[命题人:admin]

题目描述

小Biu在玩一个棋盘游戏,这个游戏给出一个n*m的棋盘,并且每个点上有一个棋子,棋子的颜色
用一个大写字母表示。
小Biu获得游戏胜利的条件是:
1.选择一个棋子作为起点。
2.每次只能走上下左右四个方格,并且下一步方格的颜色要与当前格颜色相同
3.每个块只能经过一次,要经过不少于4个不同的格子而且最终要走回起点。
问小Biu是否可以赢得游戏的胜利

输入

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

输出

如果小Biu可以获得胜利输出Yes,否则输出No。

样例输入 Copy

3 4
AAAA
ABCA
AAAA

样例输出 Copy

Yes

提示

1. 样例解释
样例中所有的'A'形成一个环。

2. 数据范围
对于20%的数据,n *m<=10;
对于65%的数据,n *m<=100;
对于100%的数据, n *m<=2500;

 
AC代码1:
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
inline int read() {int x=,f=;char c=getchar();while(c!='-'&&(c<''||c>''))c=getchar();if(c=='-')f=-,c=getchar();while(c>=''&&c<='')x=x*+c-'',c=getchar();return f*x;}
typedef long long ll;
char a[][];
int n,m;
int flag=;
int vis[][] = {
{ , },
{ , },
{ , - },
{ -, } };
int c[][]={};
int d[][]={};
void dfs(char ch,int x,int y,int t){
if(flag){
return ;
}
if(d[x][y]&&t>){
flag=;
return ;
}
for(int k=;k<;k++){
int xx=x+vis[k][];
int yy=y+vis[k][];
if ( xx>=n || xx< || yy>=m || yy< || c[xx][yy] || ch!=a[xx][yy] )
continue;
c[xx][yy]=;
dfs(ch,xx,yy,t+);
c[xx][yy]=;
}
}
int main()
{
memset(c,,sizeof(c));
memset(d,,sizeof(d));
cin>>n>>m;
for(int k=;k<n;k++){
cin>>a[k];
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
d[i][j]=;
dfs(a[i][j],i,j,);
if(flag==){
break;
}
d[i][j]=;
}
if(flag){
break;
}
}
if(flag){
printf("Yes\n");
}
else{
printf("No\n");
}
return ;
}

AC代码2:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
inline int read() {int x=,f=;char c=getchar();while(c!='-'&&(c<''||c>''))c=getchar();if(c=='-')f=-,c=getchar();while(c>=''&&c<='')x=x*+c-'',c=getchar();return f*x;}
typedef long long ll;
char a[][];
int n,m;
int flag=;
int vis[][] = {
{ , },
{ , },
{ , - },
{ -, } };
int c[][]={};
int d[][]={};
void dfs(char ch,int x,int y,int t){
if(flag){
return ;
}
for(int k=;k<;k++){
int xx=x+vis[k][];
int yy=y+vis[k][];
if(d[xx][yy]&&t>){
flag=;
return ;
}
if ( xx>=n || xx< || yy>=m || yy< || c[xx][yy] || ch!=a[xx][yy] )
continue;
c[xx][yy]=;
dfs(ch,xx,yy,t+);
c[xx][yy]=;
}
}
int main()
{
memset(c,,sizeof(c));
memset(d,,sizeof(d));
cin>>n>>m;
for(int k=;k<n;k++){
cin>>a[k];
}
for(int i=;i<n;i++){
for(int j=;j<m;j++){
d[i][j]=;
c[i][j]=;
dfs(a[i][j],i,j,);
if(flag==){
break;
}
d[i][j]=;
c[i][j]=;
}
if(flag){
break;
}
}
if(flag){
printf("Yes\n");
}
else{
printf("No\n");
}
return ;
}

dfs(迷宫)的更多相关文章

  1. DFS迷宫递归所有路径 新手入门

    这篇文章写给自己以后复习和个个入门朋友:提示同学们一定耐心看完解释 哪怕看得很难受,我是新手我懂大家的心烦.看完后慢慢体会代码 我们假设迷宫为如下状况:         {0,0,1,0}       ...

  2. DFS与DFS迷宫问题

    一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路. 输入格式 第一行输入两个整数n 和 ...

  3. HDU 2102 A计划(DFS)

    题目链接 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主 ...

  4. 洛谷——P1746 离开中山路

    P1746 离开中山路 题目背景 <爱与愁的故事第三弹·shopping>最终章. 题目描述 爱与愁大神买完东西后,打算坐车离开中山路.现在爱与愁大神在x1,y1处,车站在x2,y2处.现 ...

  5. 小鼠迷宫问题【sdut1157】【dfs,bfs综合题目】

    小鼠迷宫问题 Time Limit: 1500ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 小鼠a与小鼠b身处一个m×n的迷宫中,如图所示.每一个方格表示迷宫中 ...

  6. sdut 2449走迷宫【最简单的dfs应用】

    走迷宫 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...

  7. hdu 1728:逃离迷宫(DFS,剪枝)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. ytu 1980:小鼠迷宫问题(DFS 深度优先搜索)

     小鼠迷宫问题 Time Limit: 2 Sec  Memory Limit: 64 MB Submit: 1  Solved: 1 [Submit][Status][Web Board] Desc ...

  9. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

    [题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...

  10. NYOJ306 走迷宫(dfs+二分搜索)

    题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...

随机推荐

  1. PP: Time series clustering via community detection in Networks

    Improvement can be done in fulture:1. the algorithm of constructing network from distance matrix. 2. ...

  2. sql查询 —— 模糊查询

    --模糊查询 --like --%至少替换一个 -- _只替换一个 -- 查姓李的人 select *from student name like "李%"; -- 查名为杰伦的人 ...

  3. django 搭建一个投票类网站(三)

    之前修改index的视图的代码,工作原理是先试用loader方法加载视图,然后HTTPResponse方法初始化一个HTTPResponse对象并返回给浏览器.对于很多django视图来说,他们的工作 ...

  4. codeforces 1282 E. The Cake Is a Lie (dfs+构造)

    链接:https://codeforces.com/contest/1282/problem/E 题意:给的是一张平面图,是一个n边形,每次可以切一刀,切出一个三角形,最终切成n-2个三角形.题目给出 ...

  5. C语言二维数组指针与指针数组

    http://c.biancheng.net/view/2022.html http://c.biancheng.net/view/2020.html

  6. 第三篇,ajax 和 axios、fetch的区别

    1.jQuery ajax $.ajax({ type: 'POST', url: url, data: data, dataType: dataType, success: function () ...

  7. Thymeleaf th:include,th:replace使用

    来自:https://blog.csdn.net/believe__sss/article/details/79992408

  8. mysql(5):主从复制和分库分表

    主从复制集群 概念:主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点. 使用场景: 读写分离:使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读 ...

  9. 「口胡题解」「CF965D」Single-use Stones

    目录 题目 口胡题解 题目 有许多的青蛙要过河,可惜的是,青蛙根本跳不过河,他们最远只能跳 \(L\) 单位长度,而河宽 \(W\) 单位长度. 在河面上有一些石头,距离 \(i\) 远的地方有 \( ...

  10. optm.adam

    optm.adam 待办 https://www.cnblogs.com/dylancao/p/9878978.html 这个优化包 理解求导过程,来理解神经网络.